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

#!/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("错误日志")

 

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