自动为每条日志消息附加文本

2 投票
2 回答
1082 浏览
提问于 2025-04-17 02:11

我正在开发一个应用程序,它使用日志模块来记录错误等信息。在这种情况下,如果能在日志记录中加入一些信息,比如HTTP来源地址、GET或POST请求的参数,那就太好了。

虽然在调用.error()等函数之前,可以把这些信息加到消息里,但我想找一种方法,可以在一个中心位置统一处理这些信息(当然,不想去包裹这些函数)。

2 个回答

1

我没试过,但我觉得你可以通过在 logging.basicConfig 中指定一个 FORMAT 来实现这个功能。

根据 logging 的文档:

FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)

这段代码会打印出类似这样的内容:

2006-02-08 22:20:02,165 192.168.0.1 fbloggs 协议问题:连接重置

0

我现在用一个自定义的格式化器解决了这个问题:

class IndicoMailFormatter(logging.Formatter):
    def format(self, record):
        s = super(IndicoMailFormatter, self).format(record)
        return s + self._getRequestInfo()

    def _getRequestInfo(self):
        info = ['Additional information:']
        # ...
        return '\n\n%s' % '\n'.join(info)

这个格式化器可以很方便地通过在 logging.conf 文件中设置 class 选项(或者通过 Python 代码)来使用。

撰写回答