python - logger
日志配置
import logging
from logging.handlers import TimedRotatingFileHandler
# NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
# 创建一个 logger
logger = logging.getLogger('default')
logger.setLevel(logging.DEBUG)
# 日志输出格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s] --- %(pathname)s:%(lineno)s: %(message)s')
# 日志轮转:大于 1G 另存,保留 5 份,多个 handler 指向一个文件,会产生互相占用的问题,这也意味着轮转机制只能有一种
# handler = RotatingFileHandler('log/app.log', maxBytes=1024 * 1024 * 1024, backupCount=10)
# handler.setLevel(logging.CRITICAL)
# handler.setFormatter(formatter)
# logger.addHandler(handler)
# 日志轮转,每日 0 点另存,1 天 1 次,保留 50 份
handler = TimedRotatingFileHandler('log/app.log', when='midnight', interval=1, backupCount=50)
handler.suffix = "app_%Y%m%d.log"
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
logger.addHandler(handler)
# 控制台日志
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter(
'\033[0;30m%(asctime)s \033[1;36m[%(levelname)s] \033[0m--- %(pathname)s:%(lineno)s: \033[1;31m%(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
# 获取一个 logger
def get_logger(name: str = 'default') -> logging.Logger:
if name == 'default':
return logger
else:
raise ValueError('logger is undefined')
pass
# 一个测试
def debug():
# sys.argv[0] 指当前 .py 文件路径
logger = get_logger()
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
debug()
注意
一个 logger 可以拥有多个 handler,但是多个 handler 不能指向 1 个 log 文件,会引发文件占用相关的问题。
这也意味着,日志轮转策略,只能指定一个,按天或者按大小。
使用方式
上面的日志,是可以在别的文件引用的,引用方式如下
import logger_factory
logger = logger_factory.get_logger()
logger.info('Hello World')
日志格式
日志输出格式如下,按需调整
2024-11-26 16:04:49,359 [DEBUG] --- D:\seaboot\python\logger_factory.py: This is a debug message
2024-11-26 16:04:49,359 [INFO] --- D:\seaboot\python\logger_factory.py: This is an info message
2024-11-26 16:04:49,359 [WARNING] --- D:\seaboot\python\logger_factory.py: This is a warning message
2024-11-26 16:04:49,359 [ERROR] --- D:\seaboot\python\logger_factory.py: This is an error message
2024-11-26 16:04:49,359 [CRITICAL] --- D:\seaboot\python\logger_factory.py: This is a critical message
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!