можно выводить журнал Python без INFO: root - PullRequest
13 голосов
/ 02 декабря 2011

Я использую каркас регистрации Python с настройками по умолчанию. По некоторым причинам сравнить причину: я должен сравнить журнал с другими данными. Но журнал Python начинается со значения по умолчанию, что-то вроде:

INFO:root:post params in transmitter

Можно ли настроить вывод журнала Python без INFO:root:, например:

post params in transmitter

только с моим собственным логом?

Огромное спасибо!

Ответы [ 5 ]

22 голосов
/ 02 декабря 2011

Конечно. Вы можете установить желаемый формат:

format: '%(message)s'

Как это:

logging.basicConfig(format='%(message)s', ...)

См. Документ для получения дополнительной информации: http://docs.python.org/library/logging.config.html

3 голосов
/ 30 ноября 2016

Эти "INFO: ..." или "DEBUG: ..." появляются там, потому что какой-то обработчик определяет это.Мое предположение: обработчик по умолчанию все еще там.

Вы можете проверить это, заглянув в файл logger.handlers сразу после его создания.

logger = logging.getLogger()
logger.handlers = [] # This is the key thing for the question!

# Start defining and assigning your handlers here
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s: %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)

Кроме того, вы можете просто переопределить формат для этого обработчика по умолчанию:

if (len(logger.handlers) > 0): # Check here whatever. Or try/except. You get the idea...
    formatter = logging.Formatter("%(asctime)s: %(levelname)s - %(message)s")
    logger.handlers[0].setFormatter(formatter)

Я не эксперт по Python, так что, возможно, есть лучший способ удалить или даже не создавать этот обработчик по умолчанию, но для меня это работает очень хорошо.

Примечание : какуказано в документации, .basicConfig полезен для простых регистраторов.Если у вас есть несколько потоков с несколькими форматами, это не работает, насколько я знаю, и вам нужно использовать пользовательские обработчики.

3 голосов
/ 26 июля 2015
endDate = '2015-07-24'
logging.basicConfig(filename="win" + strftime("%Y%m%d", localtime()) + ".txt", level=logging.DEBUG,format='%(message)s')
2 голосов
/ 02 декабря 2011

Используйте Formatter.

0 голосов
/ 02 декабря 2011

Вам действительно не нужно разбираться со словом INFO ... (это действительно поможет вам, когда ваш код будет более запутанным, и вы будете использовать больше вещей, чем просто информацию, такую ​​как исключение отладки и т. д.)

Если вы хотите сравнить свои данные с этими данными, вы можете сделать что-то вроде пропуска первых 10 символов (INFO: ROOT :), а затем делать все, что захотите. Умм как-то так:

f = open("my.log","a+")
lines = f.readlines()
for line in lines:
    if(line[10:] ==  my_output):
           do_whatever_you_feel_like()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...