更新时间:2023-03-10
官方提供的logging
封装成以日期命名。
参考:
logging和loguru
logging
封装类使用
import os
import logging
import re
import time
from logging.handlers import TimedRotatingFileHandler
# logs path default:/logs/
class setup_log:
def __init__(self):
if not os.path.exists("logs"):
os.makedirs("logs")
logger = logging.getLogger()
# 禁用某部分日志记录输出
# logging.disable(logging.DEBUG)
# 禁止日志输出
logger.disabled = False
# 设置日志记录等级
logger.setLevel(logging.DEBUG)
# interval 滚动周期,
# when="MIDNIGHT", interval=1 表示每天0点为更新点,每天生成一个文件
# backupCount 表示日志保存个数
file_handler = TimedRotatingFileHandler(
filename="logs/"+time.strftime("%Y-%m-%d.log", time.localtime()), when="MIDNIGHT", interval=1, backupCount=30,
encoding='utf-8'
)
# filename="mylog" suffix设置,会生成文件名为mylog.2020-02-25.log
file_handler.suffix = "%Y-%m-%d.log"
# extMatch是编译好正则表达式,用于匹配日志文件名后缀
# 需要注意的是suffix和extMatch一定要匹配的上,如果不匹配,过期日志不会被删除。
file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
# 定义日志输出格式
file_handler.setFormatter(
logging.Formatter(
"%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s"
)
)
logger.addHandler(file_handler)
self.logger = logger
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
cls._instance = object.__new__(cls)
return cls._instance
def return_logger(self):
return self.logger
使用方式:
# 直接加载使用方式
# from loggingCfg import setup_log
# logger = setup_log().return_logger()
# logger.debug("姓名")
# logger.info("姓名")
# logger.warning("姓名")
# logger.error("姓名")
# logger.critical("姓名")
加载本地配置文件使用
#./logging.conf
# logger object default:root
[loggers]
keys=root,applog
#Set Processor Type
[handlers]
keys=consoleHandler
#Format Object List
[formatters]
keys=simpleFormatter
#Set the level and type of logger root
[logger_root]
level=DEBUG
handlers=consoleHandler
#Set the level and type of logger applog
[logger_applog]
level=DEBUG
handlers=consoleHandler
qualname = applog
propagate=0
#set consoleHandler
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
#set fileHandler
#[handler_fileHandler]
#class=handlers.TimedRotatingFileHandler
#class=FileHandler
#args=(datetime.now().strftime('%Y_%m_%d.log'), 'a')
#level=DEBUG
#formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
使用方式:
配置文件的方式比较麻烦,要重新设置一下才能以日期命名
# # 加载配置文件方式
# import logging.config
# from datetime import datetime
#
# logging.config.fileConfig('logging.conf')
# logger = logging.getLogger('applog')
# fh = logging.FileHandler('{:%Y-%m-%d}.log'.format(datetime.now()))
# formatter = logging.Formatter("%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s")
# fh.setFormatter(formatter)
# logger.addHandler(fh)
#
# logger.debug("123")
国内大佬做的日志库nb_log
github地址:https://github.com/ydf0509/nb_log
优点:可从输出跳转到代码文件。日志根据等级区分颜色。