使用basicConfig和RotatingFileHandler进行日志记录

时间:2018-01-19 15:33:51

标签: python logging

我正在尝试使用logging.basicConfig记录所有内容,并logging.hanlers.RotatingFileHandler使用maxBytes=1000000backupCount=5。 问题是,当我使用RotatingFileHandler时,它也会记录一些重复的输出。 我尝试删除basicConfig并仅使用RotatingFileHandler,但它没有记录我想要的每条消息。

示例:

logging.basicConfig(format=f, datefmt=date, level=lvl, filename=file_name)
handler = logging.handlers.RotatingFileHandler(file_name, maxBytes=1000000, backupCount=5)
logging.getLogger('').addHandler(handler)

我将其更改为删除basicConfig

handler = logging.handlers.RotatingFileHandler(file_name, maxBytes=1000000, backupCount=5)
handler.setFormatter(f)
handler.setLevel(lvl)
logging.getLogger('').addHandler(handler)

上述操作不起作用,因为RotatingFileHandler没有记录我想要的每条消息。为什么呢?

3 个答案:

答案 0 :(得分:1)

您从$ chmod u+x ./wget.sh $ ./wget.sh wget blah.com ...pid[13012] wget whatever.com ...pid[13013] wget thing.com ...pid[13014] wget foo.com ...pid[13015] wget bar.com ...pid[13016] wget baz.com ...pid[13017] wget steve.com ...pid[13018] wget kendal.com ...pid[13019] 获取的记录器的日志记录级别默认设置为logging.getLogger('')。您需要在记录器本身以及与其关联的每个处理程序上设置所需的级别,以确保记录所需的消息。您的第二个代码段设置处理程序的级别,但不设置记录器。

https://docs.python.org/3/library/logging.html#logging.Logger.setLevel

答案 1 :(得分:0)

根记录器的默认级别为reportModel。这会导致不太严重的消息被忽略(请参见Logging Levels)。为了让根记录器委派所有消息,需要将其级别设置为logging.WARNING

logging.NOTSET

答案 2 :(得分:0)

您可以通过 "logging.Formatter" 组合 basicConfig 和 RotatingFileHandler,下面的代码片段展示了如何实现。这将记录所有消息并避免重复。

import logging
import logging.handlers

#Set logger with required log level as base 
loggerInstance = logging.getLogger('name_of_logger')
loggerInstance.setLevel(logging.DEBUG)

# Configure the handler with filePath,maxBytes and backupCount
# maxBytes - theMaxSizeOfLogFileInBytes
# backupCount - numberOFBackUpFiles to be created ex: logFile1,logFile2 etc (after log rotation)
handler = logging.handlers.RotatingFileHandler(completeLogFilePathWithFileName,
                                               maxBytes=100000,
                                               backupCount=30)
#Specify the required format                                               
formatter = logging.Formatter('%(asctime)s %(filename)s %(funcName)s %(lineno)d %(levelname)s %(message)s')
#Add formatter to handler
handler.setFormatter(formatter)
#Initialize logger instance with handler
loggerInstance.addHandler(handler)

创建 loggerInstance 后,使用 logger 中的各种选项进行记录。

例如:

loggerInstance.debug("your debug message") #for debug
loggerInstance.error("your error message") #for error

有关详细文档,请访问以下链接: https://docs.python.org/3/library/logging.handlers.html#rotatingfilehandle