2015-10-16 4 views
0

Я создал файл logging.conf, который хорошо работает для одного процесса. Он регистрирует все правильно на правильном файле:Как установить имя файла журнала динамически из сценария?

[loggers] 
keys=root 

[logger_root] 
handlers=screen,file 
level=DEBUG 

[formatters] 
keys=simple,complex 

[formatter_simple] 
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 

[formatter_complex] 
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s 

[handlers] 
keys=file,screen 

[handler_file] 
class=handlers.TimedRotatingFileHandler 
interval=midnight 
backupCount=7 
formatter=complex 
level=DEBUG 
args=('../logs/my_log.log',) 

[handler_screen] 
class=StreamHandler 
formatter=simple 
level=DEBUG 
args=(sys.stdout,) 

И вот как я получаю свой объект лесоруба внутри моего сценария:

# Create logger 
logging.config.fileConfig('../logging.conf') 
logger = logging.getLogger() 

Проблема заключается в том - Теперь у меня есть более чем один процесс, используя один и тот же сценарий , и оба используют один и тот же файл журнала, что вызывает ошибку параллелизма. Как установить имя файла журнала изнутри моего скрипта? Есть способ установить атрибут args=('../logs/my_log.log',) в [handler_file] динамически?

ответ

0

Вы можете создать обработчик файлов во время выполнения в сценарии

filehandler = logging.FileHandler("process1.log") 
filehandler.setFormatter(...) 
logger.addHandler(filehandler) 

См https://docs.python.org/2/howto/logging.html#logging-advanced-tutorial для подробной документации

+0

Я понимаю. Проблема в том, что я хотел бы изменить параметр обработчика во время выполнения, а не создавать весь обработчик во время выполнения ... –