我正在为所有日志记录转换为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'
的字符串。我该怎么办?
答案 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)
可以将这种自定义格式化程序与标准格式化程序完全一样,包括初始化和附加。