2016-03-02 168 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')