将函数应用于字符串作为日志记录格式化程序的一部分
Apply a function to the string as part of logging Formatter
我正在努力将所有日志记录转换为 logging
库,但我在这一步上停留了一段时间。我通常使用一些用于格式化的颜色代码转义序列登录到控制台。这在控制台中运行良好,但在日志文件中效果不佳,日志文件不应该有任何转义序列。因此,我有一个修剪转义序列的函数。但是,我无法弄清楚如何 link 该函数用于我用于控制台输出的格式化程序。
这是我的日志记录设置:
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'
。我该怎么做?
最后我自己找到了答案:
您可以在 Formatter
中实现自定义处理功能,方法是创建一个子类,在该子类中使用自定义方法覆盖基 format
方法。通过以下实现,将首先调用基础 format
方法,然后根据返回值调用自定义函数:
class CustomFormatter(logging.Formatter):
def format(self, record):
default_formatted = logging.Formatter.format(self, record)
return custom_processing_method(default_formatted)
可以像标准格式化程序一样对待此自定义格式化程序,包括初始化和附加。
我正在努力将所有日志记录转换为 logging
库,但我在这一步上停留了一段时间。我通常使用一些用于格式化的颜色代码转义序列登录到控制台。这在控制台中运行良好,但在日志文件中效果不佳,日志文件不应该有任何转义序列。因此,我有一个修剪转义序列的函数。但是,我无法弄清楚如何 link 该函数用于我用于控制台输出的格式化程序。
这是我的日志记录设置:
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'
。我该怎么做?
最后我自己找到了答案:
您可以在 Formatter
中实现自定义处理功能,方法是创建一个子类,在该子类中使用自定义方法覆盖基 format
方法。通过以下实现,将首先调用基础 format
方法,然后根据返回值调用自定义函数:
class CustomFormatter(logging.Formatter):
def format(self, record):
default_formatted = logging.Formatter.format(self, record)
return custom_processing_method(default_formatted)
可以像标准格式化程序一样对待此自定义格式化程序,包括初始化和附加。