1.官網(wǎng)文檔
https://docs.python.org/3/library/logging.html
2. logger不會(huì)直接實(shí)例化套啤。而是以logging.getLogger(name)方式實(shí)例化膀斋,如果多次以同一個(gè)name獲取logger形耗,那么返回的都是同一個(gè)logger。
name可以是形如foo.bar.baz拆魏,bar是foo的子logger搓谆,因此薯嗤,建議以類似python包的結(jié)構(gòu)嘹害,組織多種logger撮竿。推薦 logging.getLogger(name)
**3. **對(duì)log,通常有一種想要的效果:log按天切分笔呀,每天一個(gè)log文件幢踏,保留三天內(nèi)的log,過(guò)期刪除许师。
3.1 使用TimedRotatingFileHandler
TimedRotatingFileHandler的構(gòu)造函數(shù)定義如下:
TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
filename 是輸出日志文件名的前綴房蝉,比如log/myapp.log
when 是一個(gè)字符串的定義如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval 是指等待多少個(gè)單位when的時(shí)間后僚匆,Logger會(huì)自動(dòng)重建文件
backupCount 是保留日志個(gè)數(shù)。默認(rèn)的0是不會(huì)自動(dòng)刪除掉日志搭幻。若設(shè)3咧擂,則在文件的創(chuàng)建過(guò)程中庫(kù)會(huì)判斷是否有超過(guò)這個(gè)3,若超過(guò)檀蹋,則會(huì)從最先創(chuàng)建的開始刪除松申。
#!coding:utf-8
import logging
import logging.handlers
import datetime,time
#logging 初始化工作
logger = logging.getLogger("zjlogger")
logger.setLevel(logging.DEBUG)
# 添加TimedRotatingFileHandler
# 定義一個(gè)1秒換一次log文件的handler
# 保留3個(gè)舊log文件
rf_handler = logging.handlers.TimedRotatingFileHandler(filename="all.log",when='S',interval=1,\
backupCount=3)
rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))
#在控制臺(tái)打印日志
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
logger.addHandler(rf_handler)
logger.addHandler(handler)
while True:
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
time.sleep(1)
3.2 RotatingFileHandler基于文件大小切分這個(gè)配置是可以生效的续扔,符合預(yù)期
#!coding:utf-8
#!/usr/bin/env python
import time
import logging
import logging.handlers
# logging初始化工作
logging.basicConfig()
# myapp的初始化工作
myapp = logging.getLogger('myapp')
myapp.setLevel(logging.INFO)
# 寫入文件攻臀,如果文件超過(guò)100個(gè)Bytes焕数,僅保留5個(gè)文件纱昧。
handler = logging.handlers.RotatingFileHandler(
'logs/myapp.log', maxBytes=100, backupCount=5)
myapp.addHandler(handler)
while True:
time.sleep(0.01)
myapp.info("file test")