乙個日誌函式,直接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級別的日誌記...