0
所以我想在我的Python程序中實現日誌記錄。目標是設置它以便創建一個日誌文件,並且記錄程序通過它的各個模塊執行的所有事情(根據日誌記錄級別)。這是我當前的代碼是什麼樣子:Python日誌,不寫入文件
日誌配置文本文件:
#logging.conf
[loggers]
keys=root,MainLogger
[handlers]
keys=consoleHandler
[formatters]
keys=consoleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_MainLogger]
level=DEBUG
handlers=consoleHandler
qualname=MainLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)
[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(filename)s-%(funcName)s-%lineno)04d | %(message)s
外部模塊到測試日誌:
#test.py
import logging
logger = logging.getLogger(__name__)
def testLog():
logger.debug("Debug Test")
logger.info("Info Test")
logger.warning("Warning Test")
logger.error("Error Test")
主文件:
#__init__.py
import logging
import logging.config
from datetime import datetime
logging.config.fileConfig('logging.conf', disable_existing_loggers = False)
logger = logging.getLogger('MainLogger')
fileHandler = logging.FileHandler('{:%Y-%m-%d}.log'.format(datetime.now()))
formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s')
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
if __name__ == "__main__":
import test
logger.debug("Debug Test")
test.testLog()
目前,當我運行時,所有的日誌消息當前都在使用IDLE3 shell顯示和日誌文件正在創建。但是在日誌文件本身中,正在記錄的唯一消息是來自__init__.py
的「調試測試」。在test.py
模塊中沒有任何消息正在記錄在日誌文件中。
我的問題是什麼?
解決方案是將'logger = logging.getLogger(__ name __)'行移動到'testLog()'方法的內部?這就是說,這意味着我使用的每個模塊中的每個方法都應該通過創建一個存在於該方法範圍內的日誌記錄對象來啓動該方法? – Skitzafreak
沒有,因爲你得到一個記錄器對象的功能之外沒有幫助。在導入測試之前,''__init __。py''中的''fileConfig'調用將移到頂層,這是加載軟件包時首先要執行的操作 –
Ahh好的。因此,導入日誌記錄庫,實現日誌記錄的東西,導入和運行其他的東西。 Gotcha – Skitzafreak