FileHandler в журнале конфигурации файла редкого поведения
У меня есть файл конфигурации регистрации:
logger_config.yml
version: 1
formatters:
simple:
format: '%(asctime)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: train.log
loggers:
trainLogger:
level: DEBUG
handlers: [console]
propagate: 1
root:
level: DEBUG
handlers: [console]
propagate: 1
И простой скрипт:
test.py
import logging
import logging.config
import yaml
with open('logging_config.yml', 'rt') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
# create logger
logger = logging.getLogger(__name__)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
Когда я бегу test.py
Предполагается, что скрипт будет просто войти в консоль, так как handler
за root
является console
но также создается пустой файл train.log. Почему это добавить?
1 ответ
Вы создаете fileHandler
при загрузке вашего экземпляра регистратора, даже если вы используете только consoleHandler
, Если вы просто запустите следующее в оболочке:
import logging
fh = logging.FileHandler("mylogger.txt")
quit()
Вы увидите, что "mylogger.txt" создан. Это потому, что за кулисами обработчик создает файл при __init__
не во время использования. Это лучше спроектировать таким образом, так как вы можете использовать этот обработчик несколько раз, возможно, в одно и то же время, и вы не хотите каждый раз проверять наличие файла, так как это будет медленно и вы можете ввести условие гонки. при попытке создать файл