日志记录:如何设置日志文件的换行符?

Logging: How to set the newline character of log files?

我在 Python 3.7+ 上同时在 Windows 和 [=31= 上使用登录]Linux,但行结束取决于平台。

虽然您可以在读取或写入文件时设置换行符,但显然您不能在设置 logging.FileHandler 时设置换行符:

https://docs.python.org/3/library/logging.handlers.html#filehandler

logging.FileHandler(newline = '\n') 这样的东西就可以了,如 io.open(newline = '\n') :

https://docs.python.org/3/library/io.html?highlight=file#io.open(读取或写入文件)
https://docs.python.org/3/library/io.html?highlight=file#io.TextIOWrappernewline 此处解释)

也许有一种方法可以确保在 WindowsLinux[=37= 上登录同一行结束], 但我找到 none 了。

此致。

logging.FileHandler 继承自具有 terminator 属性的 logging.StreamHandler。你可以在实例上设置它。我已经使用 os 模块提供了一个可移植的解决方案,但如果需要,您可以明确设置它。

import logging
h = logging.FileHandler("foo.log")
h.terminator = "\n"

edit:修复了始终使用 \n 作为行终止符的解决方案。

https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandler.terminator

不幸的是,您无法控制它,因为 FileHandler 在后台使用的 open() 将换行符替换为 OS 默认值。如果您真的想要对其进行特定控制,要创建与当前 OS 默认值不同的换行符,您必须子类化 FileHandler:

import logging

class MyFileHandler(logging.FileHandler):
    def _open(self):
        return open(self.baseFilename, self.mode, encoding=self.encoding, newline='\n') # set newline according to your needs here

h = MyFileHandler("foo.log")

编辑:删除了 3.7

中不存在的 errors