2017-06-04 32 views
0

你如何选择登录模块的级别?如何为模块中的每个文件设置不同级别的日志记录?

我有各种文件的应用程序, 我工作了理解日志模块,拖放打印() 我与日志目标从代码(模块)的diferents部分 灵活切换的日志记录级别,我只做到这一点从主入口点函数:

这里是我有:

APP/PartA/Script1.py 
APP/PartA/Script2.py 
APP/Other/Tools.py 
APP/main.py 

第一模块:

#/PartA/Script1.py 
import logging 
from PartA.Script2 import * 

logger = logging.getLogger(__name__) 
# Logger Always on debug level: 
logger.setLevel(logging.DEBUG) 

handler1 = logging.StreamHandler() 
handler1.setFormatter(logging.Formatter('\n%(levelname)s %(name)s')) 

logger.addHandler(handler1) 

def add_ten(n) 
    ten_added = add_five(n) + 5 
    return ten_added 

第二个模块:

#/PartA/Script2.py 
import logging 

logger = logging.getLogger(__name__) 
# Logger Always on debug level: 
logger.setLevel(logging.DEBUG) 

handler2 = logging.StreamHandler() 
handler2.setFormatter(logging.Formatter('\n%(levelname)s %(name)s %(funcName)s %(lineno)s \n%(message)s')) 

logger.addHandler(handler2) 

def add_five(n): 
    return n + 5 

主要切入点:

#main.py 
import logging 
from PartA.Script1 import * 
from PartA.Script2 import * 



logger = logging.getLogger(__name__) 
# Logger is always on debug mode.. 
logger.setLevel(logging.DEBUG) 

# Mainhandler: 
handler = logging.StreamHandler() 

handler.setLevel(logging.INFO) 

# Here i control the logs levels from the other modules: 
handler2.setLevel(logging.DEBUG) 
handler1.setLevel(logging.ERROR) 

那是工作,因为我只需要改变处理setlevels在主函数,但我不认为这是非常Python化,不必设置DEBUG级别的所有记录仪似乎总是怪怪的, 而且很重复的代码做任何新的.py文件..

回答

1

它是在Python最佳实践不配置任何记录处理/对在你的模块内部,只需使用NullHandler即可。处理程序的配置使用模块在应用程序内完成。

所以模块内部应该已经足够了。

import logging 

logger = logging.getLogger(__name__) 
+0

所以我不能在不同的模块中使用相同的记录器名称吗?终于明白了!谢谢!如果我在main.py中只使用一个处理程序,它应该始终处于调试级别,然后我更改级别或更改处理程序diferents记录器。 – JMcgreen

相关问题