自动为每条日志消息附加文本
我正在开发一个应用程序,它使用日志模块来记录错误等信息。在这种情况下,如果能在日志记录中加入一些信息,比如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 代码)来使用。