Skip to content

[Python 代码块] log日志设置

日志级别

python
import logging

# 日志级别
# critical > error > warn > info > debug

logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

级别说明

级别何时使用
DEBUG详细信息,典型地调试问题时会感兴趣。
INFO证明事情按预期工作。
WARNING表明发生了一些意外,软件还是在正常工作。
ERROR由于更严重的问题,软件已不能执行一些功能了。
CRITICAL严重错误,表明软件已不能继续运行了。

自定义logging模块

python
# -*- coding:utf-8 -*-

import os
import logging
from logging.handlers import RotatingFileHandler
from common_config import LOGGING_DIR


def init_logging(log_name="dashed.log"):
    """Initializes logging."""

    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    # 没有目录则自动创建
    if not os.path.exists(LOGGING_DIR):
        os.makedirs(LOGGING_DIR)

    LOG_FILE = os.path.join(LOGGING_DIR, log_name)

    # 日志文件不分割的写法
    # fh = logging.FileHandler(LOG_FILE)
    # fh.setLevel(logging.DEBUG)

    # 使用maxBytes设置日志文件大于5M进行自动分割
    # 使用backupCount指定保留的备份文件的个数
    # 设置日志的最低级别
    rfh = RotatingFileHandler(LOG_FILE, maxBytes=5*1024*1024, backupCount=90)
    rfh.setLevel(logging.WARNING)

    # 设置控制台输出日志的最低级别
    sh = logging.StreamHandler()
    sh.setLevel(logging.WARNING)

    # 定义输出日志的格式
    formatter = logging.Formatter("%(asctime)s [%(name)s:%(lineno)d] %(levelname)s: %(message)s")
    rfh.setFormatter(formatter)
    sh.setFormatter(formatter)

    logger.addHandler(sh)
    logger.addHandler(rfh)