以上的答案是不真的是正確的 - 它只會將來自其他模塊的消息的欄設置得更高。
一個非常快速的方法是使用這段代碼:
import logging.config
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': True,
})
你必須導入所有模塊後,設置此 - 這將禁用創建到這一點的所有記錄。這在大多數情況下都能正常工作,但有些模塊會在您創建類實例時創建它們的記錄器(這將在您的代碼中稍後發生)。
當你根據基本的Python教程,他們告訴你使用logging.basicConfig(...)
設置記錄器。這是一個問題,因爲這會將處理程序(也就是日誌將被路由到的位置)設置爲logging.lastResort
,這是全球範圍內的Python 3.2開始的所有記錄器的標準錯誤。這意味着您現在已經爲所有模塊啓用了完整日誌記錄。
所以更好的方法是創建一個不同的記錄器只爲您的模塊,並給它自己的一些處理程序,而不是使用basicConfig()
。
有這樣做的方法有兩種:
1)所有功能:
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%m-%d - %H:%M:%S")
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
fh = logging.FileHandler("mylog.log", "w")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(ch)
log.addHandler(fh)
這會給你的記錄log
,然後您可以使用像log.error("Error found")
。它將寫入一個名爲mylog.log的新文件,並且還會記錄如此的sys.stdout。你可以根據自己的喜好來改變它。
2)使用的字典:
import logging
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s: %(message)s',
'datefmt': '%Y-%m-%d - %H:%M:%S' },
},
'handlers': {
'console': {'class': 'logging.StreamHandler',
'formatter': "standard",
'level': 'DEBUG',
'stream': sys.stdout},
'file': {'class': 'logging.FileHandler',
'formatter': "standard",
'level': 'DEBUG',
'filename': 'live_detector.log','mode': 'w'}
},
'loggers': {
__name__: {'level': 'INFO',
'handlers': ['console', 'file'],
'propagate': False },
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
log = logging.getLogger(__name__)
這將給予相同的結果上面,時間長一點,但也許更容易閱讀。這會自動設定'disable_existing_loggers': True
。如果你不想這樣做,你必須添加它並將其設置爲False。