Python 通用 Logger 设置 —— 控制台+文件
在 Python 中,我们可能需要将日志同时输出到控制台进行展示,并输出到文件中备用。可以使用 logging 模块来实现日志同时输出到控制台(console)和文件中,并且可以为每个输出设置不同的格式。以下是一个示例代码,展示如何实现这一功能:
示例代码
import logging
# 创建一个 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG) # 设置日志级别
# 创建一个文件处理器,用于写入日志文件
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG) # 设置文件日志级别
# 创建一个控制台处理器,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # 设置控制台日志级别
# 创建一个文件日志格式器
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
# 创建一个控制台日志格式器
console_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(console_formatter)
# 将处理器添加到 logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 测试日志
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')
代码说明
-
创建 Logger
- 使用
logging.getLogger('my_logger')创建一个名为my_logger的 logger。 - 设置日志级别为
DEBUG,这样所有级别的日志都会被处理。
- 使用
-
创建文件处理器
- 使用
logging.FileHandler('app.log')创建一个文件处理器,日志将写入app.log文件。 - 设置文件处理器的日志级别为
DEBUG,这样所有级别的日志都会写入文件。
- 使用
-
创建控制台处理器
- 使用
logging.StreamHandler()创建一个控制台处理器,日志将输出到控制台。 - 设置控制台处理器的日志级别为
INFO,这样只有INFO及以上级别的日志会输出到控制台。
- 使用
-
创建日志格式器
- 使用
logging.Formatter创建两个不同的日志格式器,一个用于文件日志,一个用于控制台日志。 - 文件日志格式包括时间戳、logger 名称、日志级别和日志消息。
- 控制台日志格式包括 logger 名称、日志级别和日志消息。
- 使用
-
将处理器添加到 Logger
- 使用
logger.addHandler()将文件处理器和控制台处理器添加到 logger。
- 使用
-
测试日志
- 使用不同级别的日志方法(如
logger.debug、logger.info等)测试日志输出。
- 使用不同级别的日志方法(如
输出结果
-
文件
app.log:2024-07-14 12:34:56,789 - my_logger - DEBUG - This is a debug message 2024-07-14 12:34:56,789 - my_logger - INFO - This is an info message 2024-07-14 12:34:56,789 - my_logger - WARNING - This is a warning message 2024-07-14 12:34:56,789 - my_logger - ERROR - This is an error message 2024-07-14 12:34:56,789 - my_logger - CRITICAL - This is a critical message -
控制台:
my_logger - INFO - This is an info message my_logger - WARNING - This is a warning message my_logger - ERROR - This is an error message my_logger - CRITICAL - This is a critical message

浙公网安备 33010602011771号