logging 模組是python中的乙個標準庫模組,有標準庫模組提供日誌記錄api的關鍵好處是所有python模組都可以使用這個日誌記錄功能
日誌級別
日誌級別(level)
描述debug
最詳細的日誌資訊,典型場景是問題診斷
info
資訊詳細程度僅次於debug,通常只記錄關鍵節點資訊,用於確認一切都是按照我們預期的那樣工作
warnning
當某些不期望的事情發生的時記錄的資訊,但是此時程式還是在正常執行
error
由於乙個更嚴重的問題導致某些功能不能正常執行的時候記錄的資訊
critical
當發生嚴重錯誤的時候導致程式不能繼續執行時記錄的資訊
日誌實現
第一步,先建立生成日誌檔案的資料夾
# 獲取儲存日誌的路徑
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'data')
# 如果不存在日誌資料夾,自動建立
if not os.path.exists(log_path):
os.makedirs(log_path)
然後建立日誌類
class log:
def __init__(self):
# 檔案命名
self.logname = os.path.join(log_path, '%s.log' % time.strftime('%y-%m-%d'))
self.logger = logging.getlogger()
self.logger.setlevel(logging.debug)
# 日誌輸出格式
self.formatter = logging.formatter('[%(asctime)s] - %(filename)s - %(levelname)s:%(message)s')
logging模組中格式字串字段
字段/屬性名稱
使用格式
描述asctime
%(asctime)s
日誌時間發生的時間,人類可讀時間,如:2020-10-02 18:00:20,394
created
%(created)f
日誌發生的時間--時間戳,即呼叫time.time()函式返回的值
relativecreated
%(relativecreated)d
日誌時間發生的時間相對於logging載入時間的相對毫秒數
msecs
%(msec)d
日誌發生時間的毫秒部分
levelname
%(levelname)s
該日誌記錄的文字形式的日誌級別('debug', 'info', 'warning', 'error', 'critical')
levelno
%(levelno)s
該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50)
name
%(name)s
所使用的日誌器名稱,預設是'root',因為預設使用的是 rootlogger
message
%(message)s
日誌記錄的文字內容,通過msg % args
計算得到的
pathname
%(pathname)s
呼叫日誌記錄函式的原始碼檔案的全路徑
filename
%(filename)s
pathname的檔名部分,包含檔案字尾
module
%(module)s
filename的名稱部分,不包含字尾
lineno
%(lineno)d
呼叫日誌記錄函式的源**所在的行號
funcname
%(funcname)s
呼叫日誌記錄函式的函式名
process
%(process)d
程序id
processname
%(processname)s
程序名稱,python 3.1新增
thread
%(thread)d
執行緒id
threadname
%(threadname)s
執行緒名稱
建立乙個私有方法,例項化兩個物件
def __console(self, level, message):
# 建立乙個filehandler物件用於寫到本地的日誌檔案
fh = logging.filehandler(self.logname, 'a', encoding='utf-8')
fh.setlevel(logging.debug)
fh.setformatter(self.formatter) # 設定日誌輸出格式
self.logger.addhandler(fh)
# 建立乙個streamhandler物件,用於輸出到控制台
ch = logging.streamhandler()
ch.setlevel(logging.debug)
ch.setformatter(self.formatter) # 設定日誌輸出格式
self.logger.addhandler(ch)
if level == 'info':
self.logger.info(message)
self.logger.debug(message)
if level == 'warning':
self.logger.warning(message)
if level == 'error':
self.logger.error(message)
# 這兩行**是為了避免日誌輸出重複問題
self.logger.removehandler(ch)
self.logger.removehandler(fh)
fh.close()
def debug(self, message):
self.__console('debug', message)
def info(self, message):
self.__console('info', message)
def warning(self, message):
self.__console('warning', message)
def error(self, message):
self.__console('error', message)
def get_log(self):
return self.logger
python讀取日誌檔案
下面是我們的日誌檔案,裡面都是一條條這樣的資料 為了將讀取的日誌檔案存入mysql,我們需要讀取日誌檔案,然後按照指定格式切割出需要的資料 表字段會是time,ip level,messages 這個可以處理大檔案,因此每次只讀取一行 def read log 讀取日誌檔案,進行資料重組,寫入mys...
python 生成日誌檔案
import logging name input logging.basicconfig filename r c program files log.txt datefmt y m d h m s p level logging.debug,format asctime s message s ...
python處理大日誌檔案
coding utf 8 import sys import time class tail def init self,file name,callback sys.stdout.write self.file name file name self.callback callback def f...