1.下载pyyaml库
python
pip install pyyaml
2.YAML 配置文件 (logging_config.yaml
)
yaml
version: 1
disable_existing_loggers: False
formatters:
simple:
format: '[%(asctime)s] [logger:%(name)s] [file:%(filename)s:%(lineno)d] [level:%(levelname)s] - [message:%(message)s]'
datefmt: '%Y-%m-%d %H:%M:%S'
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: app.log
mode: a
encoding: utf-8
loggers:
my_logger:
level: DEBUG
handlers: [console, file]
propagate: no
root:
level: DEBUG
handlers: [console, file]
在这个配置中:
console
处理器将日志输出到控制台,并且只显示INFO及以上的日志。file
处理器将日志写入到名为app.log
的文件,并且记录DEBUG及以上的所有日志。my_logger
和根日志记录器都使用这两个处理器,因此日志会同时输出到控制台和文件。
3.Python 脚本
在Python脚本中加载并应用这个YAML配置文件:
python
import logging
import logging.config
import yaml
# 从YAML文件加载日志配置
with open('logging_config.yaml', 'r') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
# 获取并使用自定义的日志记录器
my_logger = logging.getLogger('my_logger')
my_logger.debug('这是一个调试信息')
my_logger.info('这是一个普通信息')
my_logger.warning('这是一个警告信息')
my_logger.error('这是一个错误信息')
my_logger.critical('这是一个严重错误信息')
# 获取并使用根日志记录器
root_logger = logging.getLogger()
root_logger.info('这是根日志记录器的信息')
4.日志输出示例
假设当前时间是2024-10-23 16:48:00,并且脚本名为example.py
,那么在控制台和app.log
文件中的日志输出可能如下所示:
控制台输出
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:5] [level:INFO] - [message:这是一个普通信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:6] [level:WARNING] - [message:这是一个警告信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:7] [level:ERROR] - [message:这是一个错误信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:8] [level:CRITICAL] - [message:这是一个严重错误信息]
[2024-10-23 16:48:00] [logger:root] [file:example.py:11] [level:INFO] - [message:这是根日志记录器的信息]
文件 app.log
输出
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:4] [level:DEBUG] - [message:这是一个调试信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:5] [level:INFO] - [message:这是一个普通信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:6] [level:WARNING] - [message:这是一个警告信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:7] [level:ERROR] - [message:这是一个错误信息]
[2024-10-23 16:48:00] [logger:my_logger] [file:example.py:8] [level:CRITICAL] - [message:这是一个严重错误信息]
[2024-10-23 16:48:00] [logger:root] [file:example.py:11] [level:INFO] - [message:这是根日志记录器的信息]
这样,日志消息会同时出现在控制台和日志文件中。控制台只会显示INFO及以上级别的日志,而文件会记录DEBUG及以上级别的所有日志。