簡體   English   中英

配置文件中記錄FileHandler的罕見行為

[英]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 ,假設腳本將僅登錄控制台,因為roothandlerconsole但同時也會創建一個空的train.log。 為什么要追加?

即使僅使用 consoleHandler ,您在加載記錄器實例時fileHandler創建consoleHandler 如果僅在外殼中運行以下命令:

import logging
fh = logging.FileHandler("mylogger.txt")
quit()

您會看到“ mylogger.txt”已創建。 這是因為在后台,處理程序是在__init__而不是在使用時創建文件的。 這樣最好設計,因為您可能會多次使用該處理程序(可能同時使用),並且您不想每次都檢查文件是否存在,因為那樣會很慢,並且您可能會引入競爭條件嘗試創建文件時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM