Python structlog中是否有一种方法可以将密钥从'logger'更改为'namespace'?

时间:2019-08-08 19:44:09

标签: python logging structlog

我在Python项目中使用structlog-http://www.structlog.org/en/stable/。如果配置中的处理器是

,我就有一个
stdlib.add_logger_name

这会将event_dict中的密钥添加为logger。但是,我想将密钥字符串更改为类似namespace而不是logger的形式。我该怎么办?

我已经检查了

的功能
stdlib.add_logger_name(logger, method_name, event_dict)

但该函数使用硬编码字符串logger作为

event_dict["logger"] = logger.name

2 个答案:

答案 0 :(得分:0)

Currentlystructlog.stdlib.add_logger_name()是6个LoC,您很可能只需要两个:

def add_logger_name(logger, method_name, event_dict):
    """
    Add the logger name to the event dict.
    """
    record = event_dict.get("_record")
    if record is None:
        event_dict["logger"] = logger.name
    else:
        event_dict["logger"] = record.name
    return event_dict

只需复制并粘贴并使其适应您的需求即可。

向处理器添加选项并降低每个人的速度是不值得的,因为直到今天才出现,但是structlog的目的是使这种自定义变得容易。 >

答案 1 :(得分:0)

感谢hynek的回答。 我通过添加一个本地函数解决了这个问题:

def add_logger_name(logger, method_name, event_dict):
    """
    Add the logger name to the event dict with namespace as the key as per logging convention
    """
    record = event_dict.get("_record")
    if record is None:
        event_dict["namespace"] = logger.name
    else:
        event_dict["namespace"] = record.name
    return event_dict

中进行设置
processors=[add_logger_name,...]