python logging模块按日期打印日志,并删除过期的日志
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='/home/URL/client/test_log.log',
filemode='a')
参数名称 | 参数描述 |
---|---|
filename | 日志输出到文件的文件名 |
filemode | 文件模式,r[+]、w[+]、a[+] |
format | 日志输出的格式 |
datefat | 日志附带日期时间的格式 |
style | 格式占位符,默认为 “%” 和 “{}” |
level | 设置日志输出级别 |
stream | 定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常 |
handles | 定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常 |
如果要每天生成一个日志文件,保留最近7天的日志文件。
when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval: 滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件;
backupCount: 表示日志文件的保留个数;
删除日志文件设置:
log_file_handler.suffix = “%Y-%m-%d_%H-%M.log”
log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
suffix和extMatch的格式要相对应,Year-4位,m-2位 以此类推
栗子;
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 - %(levelname)s - %(message)s"))
另一个栗子
import logging
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler
def log_init():
log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
formatter = logging.Formatter(log_fmt)
log_file_handler = TimedRotatingFileHandler(filename=LOG_PATH+"thread_", when="D", interval=1, backupCount=7)
log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
log_file_handler.setFormatter(formatter)
log_file_handler.setLevel(logging.DEBUG)
log = logging.getLogger()
log.addHandler(log_file_handler)
'''
程序运行
'''
#removeHandler 要放在程序运用打印日志的后面
log.removeHandler(log_file_handler)()
对对输出日志文件的基本管理,如在日志文件名中加入时间:
import logging, logging.handlers
import time
'''
TimedRotatingFileHandler构造函数声明
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
filename 日志文件名前缀
when 日志名变更时间单位
'S' Seconds
'M' Minutes
'H' Hours
'D' Days
'W0'-'W6' Weekday (0=Monday)
'midnight' Roll over at midnight
interval 间隔时间,是指等待N个when单位的时间后,自动重建文件
backupCount 保留日志最大文件数,超过限制,删除最先创建的文件;默认值0,表示不限制。
delay 延迟文件创建,直到第一次调用emit()方法创建日志文件
atTime 在指定的时间(datetime.time格式)创建日志文件。
'''
def test_TimedRotatingFileHandler():
# 定义日志输出格式
fmt_str = '%(asctime)s[level-%(levelname)s][%(name)s]:%(message)s'
# 初始化
logging.basicConfig()
# 创建TimedRotatingFileHandler处理对象
# 间隔5(S)创建新的名称为myLog%Y%m%d_%H%M%S.log的文件,并一直占用myLog文件。
fileshandle = logging.handlers.TimedRotatingFileHandler('myLog', when='S', interval=5, backupCount=3)
# 设置日志文件后缀,以当前时间作为日志文件后缀名。
fileshandle.suffix = "%Y%m%d_%H%M%S.log"
# 设置日志输出级别和格式
fileshandle.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt_str)
fileshandle.setFormatter(formatter)
# 添加到日志处理对象集合
logging.getLogger('').addHandler(fileshandle)
if __name__ == '__main__':
test_TimedRotatingFileHandler()
# 测试在200s内创建文件多个日志文件
for i in range(0, 100):
logging.debug("logging.debug")
logging.info("logging.info")
logging.warning("logging.warning")
logging.error("logging.error")
time.sleep(2)
转载:https://blog.csdn.net/xbean1028/article/details/105991835
查看评论