带有文件R的全局Python记录器

2024-09-28 22:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我用以下方法创建了一个全局记录器:

def logini():
    logfile='/var/log/cs_status.log'
    import logging
    import logging.handlers
    global logger
    logger = logging.getLogger()
    logging.basicConfig(filename=logfile,filemode='a',format='%(asctime)s %(name)s %(levelname)s %(message)s',datefmt='%y%m%d-%H:%M:%S',level=logging.DEBUG,propagate=0)
    handler = logging.handlers.RotatingFileHandler(logfile, maxBytes=2000000, backupCount=5)
    logger.addHandler(handler)  
    __builtins__.logger = logger

它可以工作,但是我得到了每个日志2个输出,一个有格式,一个没有。在

我意识到这是由文件旋转器引起的,因为我可以注释掉处理程序代码的2行,然后得到一个输出的正确日志条目。在

如何防止日志旋转器输出第二个条目?在


Tags: 方法importlogvarlogginghandlersdef条目
1条回答
网友
1楼 · 发布于 2024-09-28 22:06:00

当前您正在配置两个指向同一个logfile的文件记录器。要只使用RotatingFileHandler,请去掉basicConfig调用:

logger = logging.getLogger()
handler = logging.handlers.RotatingFileHandler(logfile, maxBytes=2000000,
                                               backupCount=5)
formatter = logging.Formatter(fmt='%(asctime)s %(name)s %(levelname)s %(message)s',
                              datefmt='%y%m%d-%H:%M:%S')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)  

basicConfig为您提供了一种简单的方法来实例化StreamHandler(默认)或{},并设置其日志级别和格式(更多信息请参见docs)。如果您需要这两个之外的处理程序,您应该自己实例化并配置它。在

相关问题 更多 >