Ведение журнала: как установить символ новой строки в файлах журнала?

Я использую ведение журнала на Python 3.7+ как в Windows, так и в 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 = файл #io.TextIOWrapper ( newline объяснено здесь)

Возможно, есть способ обеспечить одинаковый конец строки для входа как в Windows, так и в Linux, но я пока не нашел.

С Уважением.

2 ответа

Решение

К сожалению, вы не можете это контролировать, потому что который 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")

редактировать: удалено которого не было в 3.7

logging.FileHandler наследуется от logging.StreamHandler который имеет terminatorатрибут. Вы можете установить его на экземпляр. Я предоставил портативное решение, используя os модуль, но вы можете указать его явно, если хотите.

      import logging
import os
h = logging.FileHandler("foo.log")
h.terminator = os.linesep

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

Другие вопросы по тегам