Python如何在多个python文件中设置全局记录器设置?

时间:2016-11-09 03:22:42

标签: python python-3.x logging

我刚刚开始使用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不会将日志输出到文件中。我想将日志保存在同一个文件中。

1 个答案:

答案 0 :(得分:0)

这样做:

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之前定义所有处理程序,否则一些默认处理程序将取代它。