作为记录格式化程序的一部分,将函数应用于字符串

时间:2019-03-08 18:06:30

标签: python python-3.x logging python-logging

我正在为所有日志记录转换为logging库,但是我在这一步上停留了一段时间。我通常使用一些用于格式化的颜色代码转义序列登录到控制台。这在控制台中很好用,但在日志文件中却没有,后者不应该有任何转义序列。因此,我有一个修剪转义序列的函数。但是,我不知道如何将该功能链接到用于控制台输出的格式化程序。

这是我用于日志记录设置的内容:

    file_formatter = new_logging.Formatter(log_file_format)
    file_handler = logging.FileHandler(output_path)
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(file_formatter)
    logging.getLogger().addHandler(file_handler)

    console_formatter = logging.Formatter(log_console_format)
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(console_formatter)
    logging.getLogger().addHandler(console_handler)

本质上,我的目标是自动运行功能remove_escape_sequences(log_string)作为file_formatter的一部分。现在,它只是设置为带有占位符'%(asctime)s %(levelname)8s: "%(name)24s" - %(message)s'的字符串。我该怎么办?

1 个答案:

答案 0 :(得分:0)

最终自己找到答案:

您可以通过创建一个子类在Formatter中实现自定义处理功能,在该子类中用自定义方法覆盖基本format方法。通过以下实现,将首先调用基本的format方法,然后将对返回的值调用自定义函数:

class CustomFormatter(logging.Formatter):
    def format(self, record):
        default_formatted = logging.Formatter.format(self, record)
        return custom_processing_method(default_formatted)

可以将这种自定义格式化程序与标准格式化程序完全一样,包括初始化和附加。