[Python] logging not working

這篇的啟程是過去利用jupyter notebook 

 用簡單的語法就可以build 好一個log檔案

還可以為log分類是python 內包的logging 套件很棒的地方

如果把log寫在file也可以不斷的複寫檔案

但不知道為何的某一天

利用spyder import logging 建立,compiler沒問題卻沒有反應的狀態

 

上網查了一會兒一直沒查到關鍵解決方法,但倒學了不少

以下是原始可以run ,之後再run卻失敗的程式碼

import logging
logging.basicConfig(
filename = "plog.log",
filemode="w",
level = logging.DEBUG)
logging.warning(dt.now().strftime("%Y/%m/%d %H:%M:%S"))
logging.warning('get personinfo json:file is not exist')

基本上python 內建logging 套件 import 後

給他檔名,應該是可以成功的(曾經成功過)

而這回卻一直run沒反應

查了許多stack overflow d issue 後

才找到一篇關鍵文 python logging does not work at all

關鍵文的作者提到,因為上述的寫法會重覆load basicConfig(),而第一次的basicConfig() 是沒有filename的

所以要在前面加上一段「logging.getLogger('').handlers=[],把handlers清掉,在走自已設好的logging.basicConfig

    logging.getLogger('').handlers = []

    logging.basicConfig(
    filename = "plog.log",
    filemode="w",
    level = logging.DEBUG)
    logging.warning(dt.now().strftime("%Y/%m/%d %H:%M:%S"))
    logging.warning('get personinfo json:file is not exist')

 而也可以另外開一個function去呼叫logging 

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)
 
# new file handler
 
handler = logging.FileHandler('plogging.log')
handler.setLevel(logging.WARNING)
 
# set logging format
 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
 
# add the handlers to the logger
 
logger.addHandler(handler)

# print log
#logger.info('YAYA')

 

參考連結

python logging does not work at all

Logging HOWTO