Python: 在日志模块中包裹日志文件文本

1 投票
2 回答
2890 浏览
提问于 2025-04-18 17:57

有没有办法配置Python的logging模块,让它在写日志文件的时候自动换行呢?

现在每次调用logging.info()、warning()或者其他的日志记录方法时,即使内容很长,它们也只会写在一行上。这让人看起来不太舒服。如果能设置一个字符数,当超过这个数时,日志就能自动换到下一行,那就太好了。

我现在使用的是:Windows 7,Python 3.3

补充说明:其实很长的日志条目是会换行的,但大概是在500到1000个字符之后。这个设置在哪里?能不能把这个数字调低一点?

2 个回答

4

我也是带着同样的问题来的,最后我用了Luke的方法,不过是用Python自带的一个模块textwrap。我喜欢在空格处换行,而且在带连字符的单词后面也换行。此外,我还喜欢可以为换行的行添加缩进的功能。所以:

import textwrap
textwrap.fill(log_line, subsequent_indent = '\t\t\t\t')
2

我想不出一个好的办法来处理这个问题,而且据我所知,日志行不管多长都不应该换行。

一般来说,记录多行日志应该在你调用日志的时候处理,但我认为这大多数情况下是不好的做法,因为这样会让后续分析日志变得有点困难。

如果你真的要这样做,我建议在每一行的开头加一个制表符,这样你就能分辨出哪些行是同一条日志信息的一部分:

log.info("firstLine\t\nsecondLine\t\nthridLine")

输出应该看起来像这样:

INFO:firstLine
    secondLine
    thridLine

另一个让它更自动化的选项是给日志行添加一些这样的内容:

X = "This is a String I want to log to many lines"
log.info("".join([X[i:i+10]+"\n\t" for i in xrange(0, len(X), 10)]))

输出应该看起来像这样:

INFO: This is a 
    String I w
    ant to log
     to many l
    ines

只需把循环中的10和字符串大小改成你想要的大小就可以了。

撰写回答