Ведение журнала Python: как представить новые строки в строке формата в файле конфигурации ведения журнала? - PullRequest
11 голосов
/ 05 января 2012

Я настраиваю регистрацию Python из файла (см. http://www.python.org/doc//current/library/logging.html#configuration-file-format).

Из примера на этой странице у меня есть файл форматирования в файле конфигурации, который выглядит так:*

[formatter_form01]
format=F1 %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter

Как поместить новую строку в строку «формат», которая определяет форматтер?Ни \n, ни \\n не работают (например, format=F1\n%(asctime)s %(levelname)s %(message)s не работает).Спасибо

Ответы [ 5 ]

8 голосов
/ 05 января 2012

Модуль logging.config читает файлы конфигурации с ConfigParser, который поддерживает многострочные значения.

Таким образом, вы можете указать свою строку format следующим образом:

[formatter_form01]
format=F1
    %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter

Значения мультилинии продолжаются с помощью отступа следующих строк (один или несколько пробелов или табуляций считаются отступом).

6 голосов
/ 05 января 2012

Файл конфигурации ведения журнала основан на модуле ConfigParser. Там вы найдете, что можете решить это так:

[formatter_form01]
format=F1
   %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter
0 голосов
/ 27 февраля 2015
import logging
logformat = "%(asctime)s %(message)s\n\r"
logging.basicConfig(level=logging.DEBUG, format=logformat,filename='debug.log', filemode='w')           
logging.debug (Your String here)

Текст отладки в файле будет записан с новой строкой.

0 голосов
/ 08 августа 2012

Это может быть простой способ:

import logging
logformat = """%(asctime)s ... here you get a new line
    ... %(thread)d .... here you get another new line
    %(message)s"""
logging.basicConfig(format=logformat, level=logging.DEBUG)

Я тестировал, вышеупомянутая настройка дает две новые строки для каждого сообщения регистрации, как показано в кодах. Примечание: %(asctime)s и тому подобное - это строки форматирования в журнале Python.

0 голосов
/ 05 января 2012

Лучше всего было бы использовать пользовательский форматер (вместо логирования. Формататор) ... Для справки вот исходный код для логирования. Форматирующий формат:

def format(self, record):
    record.message = record.getMessage()
    if string.find(self._fmt,"%(asctime)") >= 0:
        record.asctime = self.formatTime(record, self.datefmt)
    s = self._fmt % record.__dict__
    if record.exc_info:
        # Cache the traceback text to avoid converting it multiple times
        # (it's constant anyway)
        if not record.exc_text:
            record.exc_text = self.formatException(record.exc_info)
    if record.exc_text:
        if s[-1:] != "\n":
            s = s + "\n"
        s = s + record.exc_text
    return s

Это довольно ясно для менячто если self._fmt читается из текстового файла (одной строкой), то никакого удаления из него невозможно.Может быть, вы можете расширить логирование. Отформатировать, переопределить этот метод и заменить 4-ю строку на что-то вроде:

s = self._fmt.replace('\\n', '\n') % record.__dict__

или что-то более общее, если вы хотите, чтобы другие вещи также были экранированы.1008 * РЕДАКТИРОВАТЬ: альтернативно, вы можете сделать это в методе init , один раз (вместо того, чтобы каждый раз форматировать сообщение).Но, как уже отмечали другие, ConfigParser поддерживает несколько строк, поэтому нет необходимости идти по этому пути ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...