[英]FileHandler in config file logging rare behabior
我有一個日志記錄配置文件:
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
,假設腳本將僅登錄控制台,因為root
的handler
是console
但同時也會創建一個空的train.log。 為什么要追加?
即使僅使用 consoleHandler
,您在加載記錄器實例時fileHandler
創建consoleHandler
。 如果僅在外殼中運行以下命令:
import logging
fh = logging.FileHandler("mylogger.txt")
quit()
您會看到“ mylogger.txt”已創建。 這是因為在后台,處理程序是在__init__
而不是在使用時創建文件的。 這樣最好設計,因為您可能會多次使用該處理程序(可能同時使用),並且您不想每次都檢查文件是否存在,因為那樣會很慢,並且您可能會引入競爭條件嘗試創建文件時
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.