python?logging模塊詳解及其日志定時(shí)清理方式
python logging模塊及日志定時(shí)清理
1.創(chuàng)建logger對象
logger = logging.getLogger(log_name) # 傳入logger名字
2.logging.basicConfig常用樣式
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='./Log/test_log.log', filemode='a')
參數(shù)名稱 | 描述 |
---|---|
level | 日志輸出級別 |
format | 日志輸出的格式 |
datefmt | 使用指定的格式字符串的處理程序 |
filename | 日志輸出到文件的文件名 |
filemode | 文件模式,r[+]、w[+]、a[+] |
日志等級說明:
DEBUG
:程序調(diào)試bug時(shí)使用INFO
:程序正常運(yùn)行時(shí)使用WARNING
:程序未按預(yù)期運(yùn)行時(shí)使用,但并不是錯(cuò)誤,如:用戶登錄密碼錯(cuò)誤ERROR
:程序出錯(cuò)誤時(shí)使用,如:IO操作失敗CRITICAL
:特別嚴(yán)重的問題,導(dǎo)致程序不能再繼續(xù)運(yùn)行時(shí)使用,如:磁盤空間為空,一般很少使用
日志等級從低到高的順序是: DEBUG < INFO < WARNING < ERROR < CRITICAL
3.常用handlers的使用
StreamHandler
流handler——包含在logging模塊中的三個(gè)handler之一。
能夠?qū)⑷罩拘畔⑤敵龅絪ys.stdout, sys.stderr 或者類文件對象(更確切點(diǎn),就是能夠支持write()和flush()方法的對象)。
只有一個(gè)參數(shù):
class logging.StreamHandler(stream=None)
日志信息會(huì)輸出到指定的stream中,如果stream為空則默認(rèn)輸出到sys.stderr。
FileHandler
logging模塊自帶的三個(gè)handler之一。繼承自StreamHandler。將日志信息輸出到磁盤文件上。
構(gòu)造參數(shù):
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
模式默認(rèn)為append,delay為true時(shí),文件直到emit方法被執(zhí)行才會(huì)打開。默認(rèn)情況下,日志文件可以無限增大。
NullHandler
空操作handler,logging模塊自帶的三個(gè)handler之一。沒有參數(shù)。
WatchedFileHandler
位于logging.handlers模塊中。用于監(jiān)視文件的狀態(tài),如果文件被改變了,那么就關(guān)閉當(dāng)前流,重新打開文件,創(chuàng)建一個(gè)新的流。由于newsyslog或者logrotate的使用會(huì)導(dǎo)致文件改變。
這個(gè)handler是專門為linux/unix系統(tǒng)設(shè)計(jì)的,因?yàn)樵趙indows系統(tǒng)下,正在被打開的文件是不會(huì)被改變的。
參數(shù)和FileHandler相同:
class logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
RotatingFileHandler
位于logging.handlers支持循環(huán)日志文件。
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
參數(shù)maxBytes和backupCount允許日志文件在達(dá)到maxBytes時(shí)rollover.當(dāng)文件大小達(dá)到或者超過maxBytes時(shí),就會(huì)新創(chuàng)建一個(gè)日志文件。
上述的這兩個(gè)參數(shù)任一一個(gè)為0時(shí),rollover都不會(huì)發(fā)生。也就是就文件沒有maxBytes限制。backupcount是備份數(shù)目,也就是最多能有多少個(gè)備份。
當(dāng)前的日志文件大小超過設(shè)定的maxBytes時(shí)會(huì)將當(dāng)前的日志文件名例a.log后面加上.1的后綴,如a.log.1,并新建一個(gè)a.log文件來記錄日志信息。
TimedRotatingFileHandler
定時(shí)循環(huán)日志handler,位于logging.handlers,支持定時(shí)生成新日志文件。
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
參數(shù)when決定了時(shí)間間隔的類型,參數(shù)interval決定了多少的時(shí)間間隔。
如when=‘D’,interval=2,就是指兩天的時(shí)間間隔,backupCount決定了能留幾個(gè)日志文件。
超過數(shù)量就會(huì)丟棄掉老的日志文件。when的參數(shù)決定了時(shí)間間隔的類型。
其他handler
SocketHandler、DatagramHandler、SysLogHandler、NtEventHandler、SMTPHandler、MemoryHandler、HTTPHandler
這些handler都不怎么常用,所以具體介紹就請參考官方文檔 其他handlers
handler參數(shù)配置
如:
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
when
:是一個(gè)字符串,用于描述滾動(dòng)周期的基本單位,字符串的值及意義如下(不區(qū)分大小寫):
類型 | 單位 |
---|---|
S | 秒 |
M | 分 |
H | 時(shí) |
D | 天 |
W0-W6 | 周一至周日 |
midnight | 每天的凌晨 |
interval
: 滾動(dòng)周期,單位有when指定,比如:when=’D’,interval=1,表示每天產(chǎn)生一個(gè)日志文件,且清理匹配到的過期文件;backupCount
: 表示日志文件的保留個(gè)數(shù);delay
:延遲文件創(chuàng)建,直到第一次調(diào)用emit()方法創(chuàng)建日志文件atTime
:在指定的時(shí)間(datetime.time格式)創(chuàng)建日志文件。
刪除日志文件設(shè)置:
# suffix設(shè)置,會(huì)生成文件名為xxx.2022-02-10.log log_file_handler.suffix = "%Y-%m-%d.log" # extMatch是編譯好正則表達(dá)式,用于匹配日志文件名后綴,需要注意的是suffix和extMatch一定要匹配的上,如果不匹配,過期日志不會(huì)被刪除。 log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
suffix和extMatch的格式要相對應(yīng),Year-4位,m-2位 以此類推
舉例:
rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0)) rf_handler.setFormatter(logging.Formatter("[%(asctime)s] -- %(remote_addr)s -- requested -- %(url)s -- %(levelname)s -- %(process)s -- %(thread)s -- %(module)s -- %(funcName)s -- %(lineno)d -- %(message)s --\n__________"))
添加到日志處理對象集合
my_logging.addHandler(handle)
關(guān)閉日志收集器
my_logging.removeHandler(handler)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python編程django實(shí)現(xiàn)同一個(gè)ip十分鐘內(nèi)只能注冊一次
這篇文章主要介紹了Python編程django實(shí)現(xiàn)同一個(gè)ip十分鐘內(nèi)只能注冊一次的相關(guān)內(nèi)容,具有一定參考價(jià)值。需要的朋友可以了解下。2017-11-11PyTorch中tensor.backward()函數(shù)的詳細(xì)介紹及功能實(shí)現(xiàn)
backward()?函數(shù)是PyTorch框架中自動(dòng)求梯度功能的一部分,它負(fù)責(zé)執(zhí)行反向傳播算法以計(jì)算模型參數(shù)的梯度,這篇文章主要介紹了PyTorch中tensor.backward()函數(shù)的詳細(xì)介紹,需要的朋友可以參考下2024-02-02python+matplotlib演示電偶極子實(shí)例代碼
這篇文章主要介紹了python+matplotlib演示電偶極子實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python面向?qū)ο笾惡蛯ο髮傩缘脑鰟h改查操作示例
這篇文章主要介紹了Python面向?qū)ο笾惡蛯ο髮傩缘脑鰟h改查操作,結(jié)合實(shí)例形式分析了Python面向?qū)ο笙嚓P(guān)的類與對象屬性常見操作技巧,需要的朋友可以參考下2018-12-12