你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Python logging模块实现同时向控制台和文件打印日志

2021/12/24 4:50:01

有时候我们在运行程序的时候,希望日志既要在控制台面板输出,同时也要在日志文件中写入,这样有利于我们实时掌握程序的运行状态,也方便程序出错的时候,能够在日志文件中分析程序中存在的错误。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: Roc-xb
"""

import logging, sys


def config_logging(file_name: str, console_level: int = logging.INFO, file_level: int = logging.DEBUG):
    file_handler = logging.FileHandler(file_name, mode='a', encoding="utf8")
    file_handler.setFormatter(logging.Formatter(
        '[%(asctime)s %(levelname)s] %(message)s',
        datefmt="%Y-%m-%d %H:%M:%S"
    ))
    file_handler.setLevel(file_level)
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(logging.Formatter(
        '[%(asctime)s %(levelname)s] %(message)s',
        datefmt="%Y-%m-%d %H:%M:%S"
    ))
    console_handler.setLevel(console_level)
    logging.basicConfig(level=min(console_level, file_level), handlers=[file_handler, console_handler])


if __name__ == '__main__':
    # 参数解释:
    # 第一个参数:日志文件名称
    # 第二个参数:控制台日志输出最小等级(默认:logging.INFO)
    # 第三个参数:文件日志输出最小等级(默认:logging.DEBUG)
    config_logging("test.log", logging.INFO, logging.DEBUG)
    logger = logging.getLogger(__name__)
    logger.info("一般日志")
    logger.warning("警告日志")
    logger.error("错误日志")