2024-04-19 07:09:05 发布
网友
我需要一个日志模块来解析日志消息并将其发送到数据库以供以后分析(我使用的是Elasticsearch数据库)。我当前的实现使用logging模块,并具有所有标准调试级别。为此,我需要访问日志消息。Python的logging模块中是否有一个方法可以让我访问消息?在
logging
我觉得这可以归结为编写一个适合Python的logging模块的日志处理程序。有什么想法吗?在
class StoredLogger(logging.Logger): def makeRecord(self, *args, **kwargs): ... return logging.LogRecord(*args, **kwargs) logging.setLoggerClass(StoredLogger)
在makeRecord中,可以添加对store_message等函数的调用,该函数的行为由您定义。在
makeRecord
store_message
您可以编写自己的记录工厂,可以在消息发生时使用它来存储消息。在
^{pr 3}$
您可以将对store_message的调用添加到record_factory中。在
record_factory
def record_factory(*args, **kwargs): store_message(*args, **kwargs) global old_factory return old_factory(*args, **kwargs)
然后,当您使用logging.info('foo')之类的东西时,它将通过store_message,然后通过写入其输出流来恢复其正常行为。您可能需要考虑将record_factory重命名为更具描述性的名称,如stored_record_factory。在
logging.info('foo')
stored_record_factory
Python2
在
^{pr2}$makeRecord
中,可以添加对store_message
等函数的调用,该函数的行为由您定义。在Python 3.2版+
您可以编写自己的记录工厂,可以在消息发生时使用它来存储消息。在
^{pr 3}$
您可以将对
store_message
的调用添加到record_factory
中。在然后,当您使用
logging.info('foo')
之类的东西时,它将通过store_message
,然后通过写入其输出流来恢复其正常行为。您可能需要考虑将record_factory
重命名为更具描述性的名称,如stored_record_factory
。在相关问题 更多 >
编程相关推荐