2016-03-02 123 views
1

所以我试图跨多个模块记录一些信息,并且我设置了一个记录器,但它记录了一切两次。我已经研究了一段时间,主要建议是为每个我登录的模块添加一个getLogger('something')。如果必须的话,我会这样实现它,但是我正在寻找一种方法(如果存在的话)在主模块中创建一次记录器,并将其传递给其他模块(希望通过导入)。Python日志记录创建多个日志

这是我如何初始化的.py创建我的记录,

formatter = logging.Formatter("[%(asctime)s] {%(module)s:%(lineno)d} (levelname)s - %(message)s") 
file_handler = logging.FileHandler('example.log') 
file_handler.setLevel(logging.INFO) 
file_handler.setFormatter(formatter) 
app.logger.addHandler(file_handler) 

我的其他模块导入当前,并调用它,如下所示,

from __init__ import app 
app.logger.info("message test") 
+0

你是什么意思“它会记录一切两次”? –

+0

如果我做了app.logger.info(“message test”),我的日志文件看起来像 [2016-03-01 16:58:38,755] {module.py:100} INFO message [2016-03- 01 16:58:38,755] {module.py:100} INFO消息 –

回答

0

__init__.py

import logging 

formatter = logging.Formatter("[%(asctime)s] {%(module)s:%(lineno)d} (levelname)s - %(message)s") 
file_handler = logging.FileHandler('example.log') 
file_handler.setLevel(logging.INFO) 
file_handler.setFormatter(formatter) 

logger = logging.getLogger('app') 
logger.addHandler(file_handler) 
logger.setLevel(logging.INFO) 

logger.info('Logger initialized') 

app.py

[2016-03-01 20:03:01,364] {__init__:12} (levelname)s - Logger initialized 
[2016-03-01 20:03:01,364] {app:3} (levelname)s - message test 

内容:运行app.py 一次example.log

from __init__ import logger 

logger.info('message test') 

内容再次运行app.py后example.log

[2016-03-01 20:03:01,364] {__init__:12} (levelname)s - Logger initialized 
[2016-03-01 20:03:01,364] {app:3} (levelname)s - message test 
[2016-03-01 20:03:12,034] {__init__:12} (levelname)s - Logger initialized 
[2016-03-01 20:03:12,034] {app:3} (levelname)s - message test 

这是否对您有帮助?

+0

不幸的是,在我的地方它仍然会记录两次。 logger.info('Logger initialized')以某种方式被调用了9次(我有很多模块正在使用) –

+0

好吧,我不知道为什么你的代码会记录多次。也许你可以更新原来的问题,以获得一个自我一致的例子,这种双重日志记录或发布你的代码在github上执行这种多重日志记录。 –

+0

我怀疑我可以发布一个模拟发生在我身上的事情的例子,我无法将它上传到github。感谢您的帮助。 –

0

logging.conf

[loggers] 
keys=root,main 

[logger_root] 
level=DEBUG 
handlers=consoleHandler 

[logger_main] 
level=DEBUG 
qualname=main 
handlers=fileHandler 
#####################handlers######################### 
[handlers] 
keys=consoleHandler,fileHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=DEBUG 
formatter=fmt 
args=(sys.stdout,) 

#10M-->10*1024*1024,append mod,5-->5 pcs 
[handler_fileHandler] 
class=logging.handlers.RotatingFileHandler 
level=DEBUG 
formatter=fmt 
args=('info.log','a',10*1024*1024,5,) 
######################formatters######################### 
[formatters] 
keys=fmt 

[formatter_fmt] 
format= %(asctime)s %(filename)s[line:%(lineno)d] -loggername:%(name)s- %(levelname)s --> %(message)s 
datefmt= 
################################################ 

你的脚本:

import logging 
import logging.config 
logging.config.fileConfig('logging.conf') 
logger = logging.getLogger("main") 

logger.debug('This is debug message') 
logger.info('This is info message') 
logger.warning('This is warning message') 
logger.error('this is error message') 
logger.critical('this critical')