我有一个底层工具正在记录的项目,我也在记录(使用不同的记录器实例)。
但是,有时我无权访问的记录器会公开我想从日志中删除的信息(或用占位符替换)。
有没有办法可以使用过滤器为项目中的所有python 记录器执行此操作?
这是我在 Django 中的日志配置:
LOGGING_CONFIG = None
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"my_formatter": {
"format": "[%(asctime)s] %(message)s",
"datefmt": "%d/%b/%Y %H:%M:%S",
},
},
"handlers": {
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "my_formatter",
},
},
"loggers": {
"my_logger": {
"handlers": ["console"],
"level": "DEBUG"
},
},
}
logging.config.dictConfig(LOGGING)
Run Code Online (Sandbox Code Playgroud)
真的,我的最终目标只是通过替换它们来防止某些东西出现在日志中——如果有其他方法可以做到这一点,请随时分享。
谢谢!
如果您的主要目标是过滤敏感数据,请阅读使用 Python 从日志中隐藏敏感数据。您可以实施 alogging.Filter以防止记录某些记录,或实施 aloggingFormatter以使用正则表达式仅减少特定记录的部分。
要将过滤器和格式化程序类应用于所有记录器,请在字典配置中定义它们并将其添加到您拥有的所有处理程序中。另外,请考虑通过设置删除任何未描述的处理程序disable_existing_loggers': True。请参阅Django 日志记录文档中的自定义格式化程序和过滤器示例。
如果您想将相同的日志配置传播到项目中的所有工作人员,我建议在您的实用程序中创建一个记录器文件,然后将其导入到任何地方以使用它,而不是import logging
如果您想确保您的配置不与其他处理程序冲突,您可以执行以下操作
文件 utils/log.py
import logging
import os
root = logging.getLogger()
if root.handlers:
for handler in root.handlers:
root.removeHandler(handler)]
LOGGING_CONFIG=[your config]
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger()
Run Code Online (Sandbox Code Playgroud)
然后只需在所有工作人员中导入此记录器而不是记录库
from utils.log import logger
logger.info("Hello world")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |