一、問題:
使用python的logging模組記錄日誌,有時會遇到中文編碼問題錯誤。
二、解決辦法:
在logging.filehandler(path) 中新增指定編碼方式 encoding='utf-8' 即可,logging.filehandler(path, encoding='utf-8') 。
示例日誌模組**:
importlogging,sys
filelog =true
path = r'
log.txt
'logger = logging.getlogger('
log'
)logger.setlevel(logging.debug)
#呼叫模組時,如果錯誤引用,比如多次呼叫,每次會新增handler,造成重複日誌,這邊每次都移除掉所有的handler,後面在重新新增,可以解決這類問題
while
logger.hashandlers():
for i in
logger.handlers:
logger.removehandler(i)
#file log
formatter = logging.formatter('
%(asctime)s - %(levelname)s - %(message)s')
iffilelog:
fh = logging.filehandler(path,encoding='
utf-8')
fh.setlevel(logging.debug)
fh.setformatter(formatter)
logger.addhandler(fh)
#console log
formatter = logging.formatter('
%(message)s')
ch =logging.streamhandler(sys.stdout)
ch.setlevel(logging.debug)
ch.setformatter(formatter)
logger.addhandler(ch)
if__name__ == '
__main__':
logger.info(
"這是乙個測試
")
另乙個解決方法
importlogging
file = open("
log", encoding="
utf-8
", mode="a"
)logging.basicconfig(level=logging.debug,
stream=file,
format="
%(asctime)s ""
%(filename)s [line:%(lineno)d] ""
%(levelname)s\n""
%(message)s",
datefmt="
%a, %d %b %y %h:%m:%s")
logging.debug(
"除錯資訊")
logging.info(
"普通資訊")
logging.warning(
"警告資訊")
logging.error(
"錯誤資訊")
logging.critical(
"嚴重錯誤資訊")
file.close()
stream : 日誌的輸出流,可以指定輸出到 sys.stderr, sys.stdout 或者檔案, 預設輸出到 sys.stderr, 當 stream 和 filename 同時指定時, stream 被忽略
利用 stream 輸出到檔案便可以解決編碼問題, 然而這樣一來卻也帶來了一些問題
首先, 檔案在程式執行過程中必須始終保持開啟狀態
其次, 不能同時進行寫入檔案與控制台輸出
使用python的logging模組記錄日誌,有時會遇到中文編碼問題錯誤。
二、解決辦法:
在logging.filehandler(path) 中新增指定編碼方式 encoding='utf-8' 即可,logging.filehandler(path, encoding='utf-8') 。
示例日誌模組**:
importlogging,sys
filelog =true
path = r'
log.txt
'logger = logging.getlogger('
log'
)logger.setlevel(logging.debug)
#呼叫模組時,如果錯誤引用,比如多次呼叫,每次會新增handler,造成重複日誌,這邊每次都移除掉所有的handler,後面在重新新增,可以解決這類問題
while
logger.hashandlers():
for i in
logger.handlers:
logger.removehandler(i)
#file log
formatter = logging.formatter('
%(asctime)s - %(levelname)s - %(message)s')
iffilelog:
fh = logging.filehandler(path,encoding='
utf-8')
fh.setlevel(logging.debug)
fh.setformatter(formatter)
logger.addhandler(fh)
#console log
formatter = logging.formatter('
%(message)s')
ch =logging.streamhandler(sys.stdout)
ch.setlevel(logging.debug)
ch.setformatter(formatter)
logger.addhandler(ch)
if__name__ == '
__main__':
logger.info(
"這是乙個測試
")
另乙個解決方法
importlogging
file = open("
log", encoding="
utf-8
", mode="a"
)logging.basicconfig(level=logging.debug,
stream=file,
format="
%(asctime)s ""
%(filename)s [line:%(lineno)d] ""
%(levelname)s\n""
%(message)s",
datefmt="
%a, %d %b %y %h:%m:%s")
logging.debug(
"除錯資訊")
logging.info(
"普通資訊")
logging.warning(
"警告資訊")
logging.error(
"錯誤資訊")
logging.critical(
"嚴重錯誤資訊")
file.close()
stream : 日誌的輸出流,可以指定輸出到 sys.stderr, sys.stdout 或者檔案, 預設輸出到 sys.stderr, 當 stream 和 filename 同時指定時, stream 被忽略
利用 stream 輸出到檔案便可以解決編碼問題, 然而這樣一來卻也帶來了一些問題
首先, 檔案在程式執行過程中必須始終保持開啟狀態
其次, 不能同時進行寫入檔案與控制台輸出
日誌模組 logging模組
logging.debug 通常除錯時用到的日誌資訊 logging.info 證明事情按照預期的那樣工作 longging.warning 表明發生了意外,或者不就得將來發生的問題 如 磁碟滿了 軟體還是正常的工作 longging.error 由於更嚴重的問題導致軟體已經不能繼續執行某些功能 l...
logging日誌模組
日誌級別日誌輸出 將日誌輸出到控制台 log1.py 如下 import logging logging.basicconfig level logging.warning,format asctime s filename s line lineno d levelname s message s...
logging 日誌模組
什麼是日誌 無處不在的 所有的程式必須記錄日誌 給使用者看的 購物軟體 銀行卡給內部人員看的 給技術人員看的 計算器500個表示式 一些計算過程,或者是一些操作過程需要記錄下來 程式出現bug的時候,來幫助我們記錄過程 排除錯誤 給非技術人員看的 學校,公司的軟體 誰在什麼時候做了什麼事兒,刪除操作...