Python日志配置

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及以上级别的所有日志。

相关推荐
这里有鱼汤8 小时前
📊量化实战篇:如何计算RSI指标的“拥挤度指标”?
后端·python
JJJJ_iii8 小时前
【机器学习05】神经网络、模型表示、前向传播、TensorFlow实现
人工智能·pytorch·python·深度学习·神经网络·机器学习·tensorflow
William.csj8 小时前
服务器/Pytorch——对于只调用一次的函数初始化,放在for训练外面和里面的差异
人工智能·pytorch·python
Ingsuifon8 小时前
pytorch踩坑记录
人工智能·pytorch·python
smj2302_796826528 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
m0_626535208 小时前
力扣题目练习 换水问题
python·算法·leetcode
软件技术NINI9 小时前
MATLAB疑难诊疗:从调试到优化的全攻略
javascript·css·python·html
Q_Q19632884759 小时前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js
ZYMFZ9 小时前
python面向对象
前端·数据库·python
wangqiaowq9 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python