python - 带文件旋转器的全局 Python 记录器

标签 python logging

我使用以下内容创建了一个全局记录器:

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 个输出,一个带有格式,一个没有。

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

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

最佳答案

当前您正在配置两个指向同一日志文件的文件记录器。要仅使用 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(默认)或FileHandler并设置其日志级别和格式(有关更多信息,请参阅docs)。如果您需要除这两个之外的处理程序,您应该自己实例化并配置它。

关于python - 带文件旋转器的全局 Python 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23385617/

相关文章:

python - python 中的正则表达式匹配以换行符分隔的字符串

c# - 文本哈希技巧在 Python 和 C# 中产生不同的结果

python - 如何在事件处理程序中访问外部对象?

logging - WSO2 ESB 中的跟踪日志文件

java - 尽管 isDebugEnabled 为真,但 log4j 调试消息未显示在控制台中

java - 使用 Log4j 的内部类的多文件日志

javascript - Python索引错误列表索引超出范围

python - 将形状拟合到给定区域,找到最佳拟合

spring - 如何使用log4j2在记录文件中记录Spring JdbcTemplate SQL查询和数据库响应

.net - 日志框架被注入(inject)到类中