2016-11-09 83 views
0

我刚开始使用Python,我很努力地使用Logger。我有两个python文件:app.py和liba.py.我想在app.py中设置日志记录,并将它用于liba.py(和另一个库)。你有什么好的想法,或者你能分享任何参考吗?Python如何在多个python文件中设置全局记录器设置?

文件结构

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

回答

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