Регистрация с несколькими параметрами в Python - PullRequest
0 голосов
/ 08 февраля 2019

В модуле регистрации Python Журнал отформатирован с использованием ниже:

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

**simple_example.py**
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')

, который дает вывод, как показано ниже:

ВЫХОД:

2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message

Мне просто интересно, есть ли способ добавить несколько сообщений не в конце, а между ними, например, что-то вроде

 My custome message 1  - simple_example - DEBUG - my custom message 2

Можно ли как-нибудь отформатировать его следующим образом:

formatter = logging.Formatter('%(message1)s - %(name)s - %(levelname)s - %(message2)s')

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете написать свой собственный класс Formatter и передать ваше дополнительное сообщение в виде kwargs:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = record.args.get("message2")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
formatter = MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
ch.setLevel(logging.ERROR)
logger.addHandler(ch)

logger.error("debug message", {"message2": "Blub"})

Вывод:

2019-02-08 14: 33: 50,487 - Blub- test - ERROR - отладочное сообщение


Edit: Я не знаю, почему это не работает "из коробки" с уровнем INFO, но выможет сделать следующее, что будет работать:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = record.args.get("message2")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
ch.setFormatter(MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s'))
logging.basicConfig( level=logging.INFO, handlers=[ch] )

logger.info("debug message", {"message2": "Blub"})

Вывод:

2019-02-11 12: 53: 17,014 - Blub - тест - INFO - сообщение отладки


Редактировать 2: Чтобы это работало без указания слова с message2 , вы можете изменить код следующим образом:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = ""
        if(record.args):
            record.message2 = record.args.get("message2", "Fallback Value")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
ch.setFormatter(MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s'))
logging.basicConfig( level=logging.INFO, handlers=[ch] )

logger.info("debug message", {"message2": "Blub"})
logger.info("This is my sample log")
logger.info("This is my sample log", {"hello": "World"})

Выход:

2019-02-11 13:20:53,419 - Blub - test - INFO - debug message
2019-02-11 13:20:53,419 -  - test - INFO - This is my sample log
2019-02-11 13:20:53,419 - Fallback Value - test - INFO - This is my sample log
0 голосов
/ 08 февраля 2019

Привет, вы можете использовать свое собственное сообщение прямо в Formatter и использовать %(message)s, чтобы разместить свое сообщение регистрации

См. Пример ниже

formatter = logging.Formatter('My custome message 1 - %(name)s - %(levelname)s - %(message)s my custom message 2')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...