import logging
import os
import sys
from logging.handlers import TimedRotatingFileHandler
def set_logger(name:str,log_dir:str,log_filename:str):
'''
:param name: logger名字
:param log_dir: 保存日志的路径
:return:
'''
if os.path.exists(log_dir):
pass
else:
os.makedirs(log_dir)
# 1. 创建日志对象
logger = logging.getLogger(name=name)
# 2. 设置日志基础级别
logger.setLevel(logging.INFO)
# 3. 创建日志 handler,handler控制到底输出到控制台还是文件,几个文件,文件保存时间,最多几个文件,文件内最多保存多少个字符串等
console_handler = logging.StreamHandler(sys.stdout) # 控制台输出handler
file_handler = TimedRotatingFileHandler(filename=log_dir+'/'+log_filename,when='D',interval=1,backupCount=7,encoding='utf-8') # 文件handler
'''
描述:
filename:日志文件名
when:日志文件按什么维度切分。'S'-秒;'M'-分钟;'H'-小时;'D'-天;'W'-周
这里需要注意,如果选择 D-天,那么这个不是严格意义上的'天',而是从你
项目启动开始,过了24小时,才会从新创建一个新的日志文件,
如果项目重启,这个时间就会重置。所以这里选择'MIDNIGHT'-是指过了午夜
12点,就会创建新的日志。
interval:是指等待多少个单位 when 的时间后,Logger会自动重建文件。
backupCount:是保留日志个数。默认的0是不会自动删除掉日志。
'''
# 4. 设置日志文件内的格式
formatter = '[%(asctime)s]: %(name)s %(filename)s[line:%(lineno)s] %(levelname)s%(message)s'
log_formatter = logging.Formatter(formatter)
console_handler.setFormatter(log_formatter)
file_handler.setFormatter(log_formatter)
'''
可以单独为某个handler设置级别,例如:
file_handler.setLevel(logging.DEBUG)
'''
# 5. 在logger对象中添加handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)
return logger
logger = set_logger(name='log_util',log_dir='./log',log_filename='test_logfunction.log')
logger.info(" testlogging")
参考:
Python实用教程系列——Logging日志模块 - 知乎 (zhihu.com)
(192条消息) Python之logging.handlers.TimedRotatingFileHandler_往事如yan的博客-CSDN博客