2

我在WindowsLinux上都使用Python 3.7+登录,但行尾取决于平台。

虽然您可以在读取或写入文件时设置换行符,但显然您不能在设置 a 时设置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上登录时使用相同的行结尾,但我还没有找到。

问候。

4

2 回答 2

2

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

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

编辑:固定解决方案始终\n用作行终止符。

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

于 2021-09-10T08:36:41.290 回答
1

不幸的是,您无法控制它,因为open()FileHandler 在后台使用它用操作系统默认值替换换行符。如果您真的想要对其进行特定控制,要创建不同于当前操作系统默认值的换行符,您必须继承 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")

编辑:删除errors了 3.7 中不存在的

于 2021-09-10T09:38:02.410 回答