'''
date:2019-06-28
autor:wangxc
功能:1.寫日誌功能,當沒有傳入日誌寫入路徑時,他會將 本檔名.log 的日誌檔案存放到指令碼同路徑下
例子:指令碼路徑在c:logger.py,那麼生成的日誌檔案logger.log將會在c:下存在
2.可以傳入日誌的級別,控制日誌輸出的形式,如何配置日誌輸出形式,可以看下面注釋
'''import logging
import os,sys
from logging.handlers import rotatingfilehandler
'''%(name)s logger的名字
%(levelno)s 數字形式的日誌級別
%(levelname)s 文字形式的日誌級別
%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有
%(filename)s 呼叫日誌輸出函式的模組的檔名
%(module)s 呼叫日誌輸出函式的模組名
%(funcname)s 呼叫日誌輸出函式的函式名
%(lineno)d 呼叫日誌輸出函式的語句所在的**行
%(created)f 當前時間,用unix標準的表示時間的浮 點數表示
%(relativecreated)d 輸出日誌資訊時的,自logger建立以 來的毫秒數
%(asctime)s 字串形式的當前時間。預設格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒
%(thread)d 執行緒id。可能沒有
%(threadname)s 執行緒名。可能沒有
%(process)d 程序id。可能沒有
%(message)s 使用者輸出的訊息
'''#用字典儲存日誌級別 日誌輸出的形式
format_dict =
# 開發乙個日誌系統, 既要把日誌輸出到控制台, 還要寫入日誌檔案
class logger():
def __init__(self, logname, loglevel, logger="logger"):
path = os.path.split(sys.ar**[0])[0]
filename = os.path.split(sys.ar**[0])[-1]
log_file = filename.split(".")[0] + ".log"
#日誌輸出具體路徑
log_path = os.sep.join([path,log_file])
# 建立乙個logger
self.logger = logging.getlogger(logger)
#設定日誌列印的級別
#如果設定成error,則只會列印error日誌資訊
#如果設定成info,則會列印出info和error的日誌資訊
#如果設定成debug,則會列印error,info和error的日誌資訊
self.logger.setlevel(logging.debug)
#判斷日誌路徑,不存在建立
if not os.path.exists(logname):
os.makedirs(logname)
# 建立乙個handler,用於寫入日誌檔案
#fh = logging.filehandler(logname,mode='w',encoding='utf-8')
#fh.setlevel(logging.debug)
# 定義乙個rotatingfilehandler,最多備份5個日誌檔案,每個日誌檔案最大10m
fh = rotatingfilehandler(log_path,encoding='utf-8', maxbytes=1 * 1024 * 1024, backupcount=5)
#控制輸出到日誌檔案的日誌級別
fh.setlevel(logging.debug)
# 再建立乙個handler,用於輸出到控制台
ch = logging.streamhandler()
#控制輸出到控制台的日誌級別
ch.setlevel(logging.debug)
# 定義handler的輸出格式
# formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter = format_dict[int(loglevel)]
#同時在控制台和日誌中輸出,可以按個人需求修改
fh.setformatter(formatter)
ch.setformatter(formatter)
# 給logger新增handler
self.logger.addhandler(fh)
self.logger.addhandler(ch)
def getlog(self):
return self.logger
if __name__ == '__main__':
#測試logger = logger(logname='c:/users/administrator/desktop/a/', loglevel=1, logger="ww").getlog()
i = 0
while(i<10):
logger.error('this is error')
logger.debug('this is debug')
logger.info('this is info')
i = i + 1
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級別的日誌記...
python日誌模組
python的日誌模組使用logging,如果想要輸出符合自己的預期,需要重新定義,廢話不多說,直接貼 encoding utf 8 from logging.handlers import timedrotatingfilehandler import logging import osimpor...