首页 > Python资料 博客日记
[python]基于文件配置logging
2024-11-03 00:00:04Python资料围观6次
前言
python的logging支持用字典或 configparser 格式文件中读取日志记录配置
参考:https://docs.python.org/3/library/logging.config.html
使用conf文件
下面这个logger.conf
文件主要三个部分:logger
、handlers
和formatters
。代码中获取logger的时候,配置文件中[loggers]
中必须要有声明。[loggers]
中的logger具体配置在[logger_xx]
中,比如[loggers]
中声明了console
,那么console
这个logger的配置在[logger_console]
中。[logger_xxx]
中主要定义日志级别level
、日志传播propagate
、logger具体名称qualname
和日志处理器handlers
。其中qualname
在简单配置中一般和声明的logger名字保持一致,与propagate
组合搭配使用。这两个参数具体配置可以参考官方文档。logger引用的handler也需要在[handlers]
中声明,具体配置在[handler_xxx]
。handler中用到的formatter同理要在[formatters]
中声明,在[formatter_xx]
中具体配置。
示例中声明了三个logger,其中root是参考官网的,一般作为默认配置,console用于输出到控制台,file会写入到日志文件。有的项目会命名为dev
、test
和prod
,dev输出到控制台,test输出到控制台和文件,prod输出到文件。日志文件会rotate,每天rotate一份,并保留30天。日志格式化成json样式。
[DEFAULT]
LOG_DIR = '/app/logs'
[loggers]
keys=root,console,file
[handlers]
keys=consoleHandler,rotatingFileHandler
[formatters]
keys=jsonFormatter
[logger_root]
level=INFO
handlers=consoleHandler
[logger_console]
level=DEBUG
handlers=consoleHandler
propagate=0
qualname=console
[logger_file]
level=INFO
handlers=rotatingFileHandler
propagate=0
qualname=file
[handler_consoleHandler]
class=logging.StreamHandler
args=(sys.stdout,)
level=INFO
formatter=jsonFormatter
[handler_rotatingFileHandler]
class=logging.handlers.TimedRotatingFileHandler
args=(%(LOG_DIR)s + '/app.log', 'midnight', 1, 30)
level=INFO
formatter=jsonFormatter
[formatter_jsonFormatter]
class=logging.Formatter
format={"timestamp": "%(asctime)s", "level": "%(levelname)s", "file": "%(filename)s:%(lineno)d", "message": "%(message)s"}
datefmt=%Y-%m-%dT%H:%M:%S%z
代码中使用
import logging
conf_path = "logger.conf"
logging.config.fileConfig(conf_path)
logger = logging.getLogger("file")
使用dictConfig
logger.config
也可以从字典中读取配置,大致流程就是将json、yaml等格式的配置文件读取为字典,然后加载到logger.config
。这里以json为例,相关参数基本一致,只是格式不一样。
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"simple": {
"format": "%(asctime)s - %(levelname)s - %(message)s"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
"file": {
"class": "logging.handlers.TimedRotatingFileHandler",
"filename": "logs/app.log",
"when": "midnight",
"interval": 1,
"backupCount": 7,
"level": "DEBUG",
"formatter": "simple"
}
},
"root": {
"level": "INFO",
"handlers": [
"console",
"file"
]
}
}
代码中使用
import logging
import logging.config
import os
import json
if not os.path.exists("logger.json"):
raise FileNotFoundError("logger.json not found")
else:
with open("logger.json", "r") as f:
log_config = json.load(f)
if not os.path.exists("logs"):
os.makedirs("logs")
logging.config.dictConfig(log_config)
logger = logging.getLogger("root")
logger.info("info log")
logger.debug("debug log")
logger.warning("warning log")
logger.error("error log")
标签:
上一篇:领航者-跟随者编队算法 定义+特性+原理+公式+Python示例代码(带详细注释)
下一篇:没有了
相关文章
最新发布
- [python]基于文件配置logging
- 领航者-跟随者编队算法 定义+特性+原理+公式+Python示例代码(带详细注释)
- Python向Excel写入内容的方法大全
- Python 潮流周刊#75:用 Python 开发 NoSQL 数据库(摘要)
- 一文弄懂Python环境
- Python酷库之旅-第三方库Pandas(181)
- wandb 网络连接问题解决指南--wandb: Network error (SSLError), entering retry loop.
- [python]Gunicorn加持下的Flask性能测试
- 对称加密算法——DES算法(包含Python、C、Java语言代码实现)
- 【华为OD技术面试手撕真题】74、缺失的第一个正数 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(0ms)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj