日志记录:如何设置日志文件的换行符?
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.TextIOWrapper(newline
此处解释)
也许有一种方法可以确保在 Windows 和 Linux[=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
我在 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.TextIOWrapper(newline
此处解释)
也许有一种方法可以确保在 Windows 和 Linux[=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