python - 使用 structlog 设置日志级别

标签 python structlog

我正在尝试设置 structlog 并设置日志级别。我的代码如下所示:

import structlog
import logging

filepath=open("out.log",'a')

logging.basicConfig(
  level=logging.INFO
)

structlog.configure(
    processors=[structlog.stdlib.filter_by_level],
    wrapper_class=structlog.BoundLogger,
    context_class=dict,
    logger_factory=structlog.PrintLoggerFactory(filepath),
)
logger = structlog.getLogger()
logger.info('test')
这失败了:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/structlog/_base.py", line 189, in _proxy_to_logger
    args, kw = self._process_event(method_name, event, event_kw)
  File "/usr/local/lib/python3.8/site-packages/structlog/_base.py", line 149, in _process_event
    event_dict = proc(self._logger, method_name, event_dict)
  File "/usr/local/lib/python3.8/site-packages/structlog/stdlib.py", line 381, in filter_by_level
    if logger.isEnabledFor(_NAME_TO_LEVEL[name]):
AttributeError: 'PrintLogger' object has no attribute 'isEnabledFor'
好的,当然。我不应该将 PrintLogger 与 stdlib 处理器一起使用。但我想按日志级别过滤(因为这就是日志记录通常的工作方式,嗯?)
那我该怎么做呢?我假设我需要使用其他一些记录器工厂,但是哪一个?
当然 structlog.stdlib.LoggerFactory 可以工作,但它不会重定向到文件。
所以我说:好的,我将创建自己的过滤器:
def my_filter_by_level(logger, name, event_dict):
    if True:
        return event_dict
    else:
        raise DropEvent
...
processors=[my_filter_by_level],
当我尝试使用记录器时,我得到:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/structlog/_base.py", line 190, in _proxy_to_logger
    return getattr(self._logger, method_name)(*args, **kw)
TypeError: msg() got an unexpected keyword argument 'organization'
这是来自
logger = logger.bind(**{"organization": "blah"})
但为什么?我的处理器有什么问题?

最佳答案

这是设置默认日志级别的另一种方法。 “INFO”以上的所有级别都将被输出。

import logging
import structlog

structlog.configure(
    wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
)

log = structlog.get_logger()

关于python - 使用 structlog 设置日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63733644/

相关文章:

python - 如何以 json 格式记录 stacktrace python

python - 为你的 Python 博客生成 XML/Feed

python - 使用 matplotlib 散点图函数指向错误的 z 坐标

python - Pandas 造型师。如何忽略呈现的 HTML 中的索引列

python - pandas - 逐行应用带条件的替换函数

structlog - ExtraAdder抛出异常,认为EventDict是字符串?

Python 在日志记录中向基于 structlog 的格式化程序添加额外的字段

python - imshow 和 pcolormesh 显示具有相同输入的两个不同输出

python - Django Structlog 未将日志消息打印或写入控制台或文件