python日誌模組logging的使用

2021-10-08 03:31:44 字數 4570 閱讀 6355

乙個日誌函式,直接loggerfunc().info(『字串』)直接呼叫即可

def

loggerfunc

(pathname =

'log_test.log'

,logname=

'i_am_a_log'):

''' 自定義日誌函式

:param pathname: 日誌檔案存放的路徑,基於呼叫此函式的檔案

:param filename: 設定乙個日誌的名稱,如果刪除次變數就預設為root

:return:

'''# 設定乙個日誌的名稱,如果不設定就預設為root

logger = logging.getlogger(logname)

# 設定日誌等級,預設為warning,如果不設定,之後輸出warning等級以上的日誌

logger.setlevel(logging.debug)

# 設定log內容是否在控制台輸出,如果為true,日誌內容同時輸出到檔案和控制台,如果為false,則只輸出到檔案

logger.propagate =

false

# 生成日誌檔案,filename=檔名或者完整的路徑和檔名,encoding=編碼,預設utf-8

log_file = logging.filehandler(filename=pathname, encoding=

'utf-8'

)# 設定日誌輸出格式,可根據以下內容隨意拼接字串

''' fmt = 日誌格式

%(name)s -----> logger的名字,即上面的filename

%(levelno)s -----> 數字形式輸出log等級

%(levelname)s -----> 文字形式輸出log等級

%(pathname)s -----> 呼叫日誌輸出函式檔案的完整路徑

%(filename)s -----> 呼叫日誌輸出函式的檔名

%(module)s -----> 呼叫日誌輸出函式的模組名

%(funcname)s -----> 呼叫日誌輸出函式的函式名

%(lineno)d -----> 呼叫日誌輸出函式的**行

%(created)f -----> 當前時間,unix標準

%(relativecreated)d -----> 輸出日誌的時間,logger建立以來的毫秒數

%(asctime)s -----> 字串形式輸出當前時間,格式:2020-07-15 15:55:12,773

%(thread)d -----> 執行緒id

%(threadname)s -----> 執行緒名

%(process)d -----> 程序id

%(message)s -----> 使用者輸出的訊息

datefmt = 時間格式,即重寫%(asctime)s的格式

'''log_formatter = logging.formatter(fmt=

'%(asctime)s, %(lineno)d, %(name)s, %(filename)s, %(levelname)s, %(module)s, %(funcname)s, %(message)s'

, datefmt=

'%y-%m-%d %h:%m:%s',)

# 將日誌輸出格式與生成的日誌檔案關聯

log_file.setformatter(log_formatter)

# 將日誌檔案與日誌的名稱關聯

logger.addhandler(log_file)

return logger

乙個完整的日誌類,可以直接用

import os

import logging

from logging.handlers import timedrotatingfilehandler

# 日誌級別

critical =

50fatal = critical

error =

40warning =

30warn = warning

info =

20debug =

10notset =

0current_path = os.path.dirname(os.path.abspath(__file__)

)root_path = os.path.join(current_path, os.pardir)

log_path = os.path.join(root_path,

'log'

)class

loghandler

(logging.logger)

:"""

loghandler

"""def__init__

(self, name, level=debug, stream=

true

,file

=true):

self.name = name

self.level = level

logging.logger.__init__(self, self.name, level=level)

if stream:

self.__setstreamhandler__()if

file

: self.__setfilehandler__(

)def

__setfilehandler__

(self, level=

none):

""" set file handler

:param level:

:return:

"""file_name = os.path.join(log_path,

'.log'

.format

(name=self.name)

)# 設定日誌回滾, 儲存在log目錄, 一天儲存乙個檔案, 保留15天

file_handler = timedrotatingfilehandler(filename=file_name, when=

'd', interval=

1, backupcount=15)

file_handler.suffix =

'%y%m%d.log'

ifnot level:

file_handler.setlevel(self.level)

else

: file_handler.setlevel(level)

formatter = logging.formatter(

'%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'

) file_handler.setformatter(formatter)

self.file_handler = file_handler

self.addhandler(file_handler)

def__setstreamhandler__

(self, level=

none):

""" set stream handler

:param level:

:return:

"""stream_handler = logging.streamhandler(

) formatter = logging.formatter(

'%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'

) stream_handler.setformatter(formatter)

ifnot level:

stream_handler.setlevel(self.level)

else

: stream_handler.setlevel(level)

self.addhandler(stream_handler)

defresetname

(self, name)

:"""

reset name

:param name:

:return:

"""self.name = name

self.removehandler(self.file_handler)

self.__setfilehandler__(

)if __name__ ==

'__main__'

: log = loghandler(

'test'

) log.info(

'this is a test msg'

)

PythonStudy 日誌模組 logging

日誌 日之石日常的流水,將程式執行過程中的狀態或資料盡心記錄,一般是記錄到日誌檔案當中的。在正常的專案之中,專案的執行的一些列印資訊,採用logging列印到檔案當中,這個過程就稱作為 日誌記錄模組 以下為預設的操作日誌模組 匯入日誌模組 import logging logging為預設列印者,是...

python日誌模組

logging.debug 10 logging.info 20 logging.warning 30 logging.error 40 logging.critical 50預設級別為warning 預設輸出位置為控制台 import logging logging.basicconfig 可用引...

python 日誌模組

在軟體或者系統發生錯誤時可以通過日誌快速定位到錯誤,從而定位問題,解決問題。logging模組提供的日誌記錄函式所使用的日誌器設定的日誌級別是warning,因此只有warning級別的日誌記錄以及大於它的error和critical級別的日誌記錄被輸出了,而小於它的debug和info級別的日誌記...