logging日誌模組寫入中文編碼錯誤解決辦法

2022-08-22 15:03:15 字數 3956 閱讀 6619

一、問題:

使用python的logging模組記錄日誌,有時會遇到中文編碼問題錯誤。

二、解決辦法:

在logging.filehandler(path) 中新增指定編碼方式 encoding='utf-8' 即可,logging.filehandler(path, encoding='utf-8') 。

示例日誌模組**:

import

logging,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(

"這是乙個測試

")

另乙個解決方法

import

logging

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') 。

示例日誌模組**:

import

logging,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(

"這是乙個測試

")

另乙個解決方法

import

logging

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的時候,來幫助我們記錄過程 排除錯誤 給非技術人員看的 學校,公司的軟體 誰在什麼時候做了什麼事兒,刪除操作...