Python中自帶了logging庫磷杏,可以提供打印日志对竣、記錄日志文件庇楞、根據(jù)時間日志滾動、根據(jù)文件大小日志滾動否纬、過期文件刪除的功能吕晌。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.handlers #日志滾動及刪除使用
#1.設置log日志記錄格式及記錄級別
#level記錄級別包括DEBUG/INFO/WARNING/ERROR/CRITICAL,級別依次上升烦味,log只會輸出保存設置的級別及以上的日志聂使。如果設置level=logging.DEBUG,則所有級別日志都會輸出保存壁拉、如果level=logging.CRITICAL谬俄,則只輸出保存CRITICAL級別日志
#format輸出格式levelname級別名、asctime 時間弃理、filename所在文件名溃论、message記錄內(nèi)容
#datefmt 時間格式
#filename 要保存的文件名
#a寫入模式,a則每次啟動腳本時在原有文件中繼續(xù)添加痘昌;w則每次啟動腳本會重置文件然后記錄
logging.basicConfig(level=logging.INFO,
format='%(levelname)s: %(asctime)s %(filename)s %(message)s',
datefmt='%Y-%m-%d %A %H:%M:%S',
filename='myapp.log',
filemode='a')
#2.設置log日志的標準輸出打印钥勋,如果不需要在終端輸出結(jié)果可忽略
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(filename)s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#3.設置log日志文件按時間拆分記錄,并保存幾個歷史文件辆苔,如果不需要拆分文件記錄可忽略
#class logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
#例:設置每天保存一個log文件算灸,以日期為后綴,保留7個舊文件驻啤。
myapp = logging.getLogger()
myapp.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(filename)s %(message)s')
filehandler = logging.handlers.TimedRotatingFileHandler("myapp.log", when='d', interval=1, backupCount=7)#每 1(interval) 天(when) 重寫1個文件,保留7(backupCount) 個舊文件菲驴;when還可以是Y/m/H/M/S
filehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"#設置歷史文件 后綴
filehandler.setFormatter(formatter)
myapp.addHandler(filehandler)
#4.設置log日志文件按文件大小拆分記錄,并保存幾個歷史文件骑冗,如果不需要拆分文件記錄可忽略
#class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
myapp = logging.getLogger()
myapp.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(filename)s %(message)s')
filehandler = logging.handlers. RotatingFileHandler("myapp.log", mode='a', maxBytes=1024, backupCount=2)#每 1024Bytes重寫一個文件,保留2(backupCount) 個舊文件
filehandler.setFormatter(formatter)
myapp.addHandler(filehandler)
#使用
logging.debug('debug message : %s , result: %s',info,result)
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
輸出format參數(shù)中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數(shù)字形式的日志級別
%(levelname)s 文本形式的日志級別
%(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名赊瞬,可能沒有
%(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
%(module)s 調(diào)用日志輸出函數(shù)的模塊名
%(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
%(lineno)d 調(diào)用日志輸出函數(shù)的語句所在的代碼行
%(created)f 當前時間先煎,用UNIX標準的表示時間的浮 點數(shù)表示
%(relativeCreated)d 輸出日志信息時的,自Logger創(chuàng)建以 來的毫秒數(shù)
%(asctime)s 字符串形式的當前時間巧涧。默認格式是 “2003-07-08 16:49:45,896”薯蝎。逗號后面的是毫秒
%(thread)d 線程ID“可能沒有
%(threadName)s 線程名占锯。可能沒有
%(process)d 進程ID缩筛⊙萄耄可能沒有
%(message)s用戶輸出的消息
**注:1和3/4只設置一個就可以,如果同時設置了1和3歪脏,log日志中會出現(xiàn)一條記錄存了兩遍的問題疑俭。