簡體   English   中英

在警告級別登錄到文件,並在信息級別打印到標准輸出

[英]Logging at WARNING level to file and print to stdout at INFO level

我想控制我記錄到文件的級別以及打印到stdout的級別。 在這種情況下,更准確地說,我希望使logger INFO|WARNING|ERROR消息打印到標准輸出,並將WARNING|ERROR消息記錄到文件。

這是我目前擁有的:

import logging

# Logging
log_filepath = 'log_file.log'
logger = logging.getLogger('My logger')
hdlr = logging.FileHandler( log_filepath )
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.WARNING)

# Logging to stdout
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.INFO)
ch.setFormatter(formatter)
logger.addHandler(ch)

# Usage
logger.info('Hello')       # Show infos but do not log to file (does not show in stdout)
logger.warning('Oops')     # Show warnings and log to file
logger.error('Dang!')      # Show errors and log to file

但是, INFO級別的消息不會顯示在stdout中。 這是為什么?

我在OS X Mavericks上。

您的問題是您將記錄器級別設置為“警告”。 因此,您的所有處理程序都從警告級別進行記錄。

您應該將文件記錄器處理程序設置為“警告”級別,而將記錄器本身設置為“信息”級別或未設置。 默認級別為NOTSET,這意味着所有消息都已處理或委派。

hdlr.setLevel(logging.WARNING)
logger.setLevel(logging.INFO)

如前所述,您的記錄器級別已設置為“警告”,因此消息已在其中過濾並且未到達處理程序。 我也建議使用dictConfig

import logging.config

logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'formatter': {
            'format': '%(asctime)s %(levelname)s %(message)s',
        },
    },
    'handlers': {
        'stderr': {
            'class': 'logging.StreamHandler',
            'formatter': 'formatter',
            'level': 'INFO',
        },
        'log_file': {
            'class': 'logging.FileHandler',
            'filename': 'log_file.log',
            'mode': 'a',
            'formatter': 'formatter',
            'level': 'WARNING',
        },
    },
    'loggers': {
        '': {
            'level': 'INFO',
            'handlers': ['stderr', 'log_file'],
        },
    },
})

暫無
暫無

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

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