【问题标题】:Python How can I set up global logger setting in multi python files?Python 如何在多个 python 文件中设置全局记录器设置?
【发布时间】:2016-11-09 03:22:42
【问题描述】:

我刚开始使用 Python,我正在努力使用 Logger。我有两个 python 文件:app.py 和 liba.py。我想在 app.py 设置日志记录并将其用于 liba.py(和其他库)。您有什么好的想法或可以分享任何参考资料吗?

文件结构

entry.py
lib/liba.py

app.py

#! /usr/bin/env python3

import logging
logger = logging.getLogger(__name__)

from lib import liba

handler = logging.FileHandler('/tmp/app.log', 'a+')
logger.addHandler(handler)
logger.warn('sample')

liba.out()

lib/liba.py

#! /usr/bin/env python3

import logging
logger = logging.getLogger(__name__)

def out():
    logger.warn('liba')

运行python

$ python3 app.py 
liba

app.py 将日志输出到日志文件。 liba.py 不会将日志输出到文件中。我想将日志保存在同一个文件中。

【问题讨论】:

    标签: python python-3.x logging


    【解决方案1】:

    这样做:

    app.py

    #! /usr/bin/env python3
    
    import logging
    logger = logging.getLogger()
    handler = logging.FileHandler('/tmp/app.log', 'a+')
    logger.addHandler(handler)
    
    logger.warn('sample')
    
    from lib import liba
    
    liba.out()
    

    lib/liba.py

    #! /usr/bin/env python3
    
    import logging    
    def out():
        logging.warn('liba')
    

    您不需要实例化日志记录,除非您想配置处理程序,您只能在主脚本中执行此操作。然后所有日志记录将转到根记录器,这是在没有特定名称logging.getLogger() 的情况下实例化时得到的。我喜欢以这种方式使用它,因为您无需在所有模块中匹配名称即可使其工作。在您的模块中,您只需使用logging.warn('blabla') 发送日志消息。您还需要确保在调用 logging.warn 之前定义所有处理程序,否则一些默认处理程序将取代它。

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多