Python日志对象

4 投票
2 回答
5529 浏览
提问于 2025-04-16 03:59

我正在尝试根据数据的类型来重新格式化发送到日志记录器的输出数据。

比如说:

  • 字符串会原样打印出来
  • 字典和列表会自动缩进并美化成HTML格式
  • 我自己定义的类会单独处理,并转换成HTML格式

我遇到的问题是,发送给格式化器的消息总是字符串。文档里明确说可以发送对象作为消息,但似乎在我格式化之前,这些对象就被转换成字符串了。

class MyFormatter(logging.Formatter):

    def format(self, record):
        #The problem is that record.message is already a string...
        ...

我应该在哪里处理作为消息发送的对象呢?

2 个回答

0

也许是在你记录日志的对象的 __str__() 方法里?

4

好的,我搞明白了。

官方文档有点不太清楚,但基本上,有两个属性。

LogRecord.message -> 是消息的字符串表示,也就是把消息变成文字。

而 LogRecord.msg -> 是消息本身。

要获取实际的对象,你必须使用 .msg 这个属性才能正常工作。

希望这对其他人有帮助。

撰写回答