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

posted on 2024-12-05 17:34  疯狂的妞妞  阅读(8)  评论(0编辑  收藏  举报

导航