Python Logging - сохранить в файл с форматированием - PullRequest
1 голос
/ 14 октября 2019

У меня есть модуль регистрации Python, сконфигурированный со всеми видами цветных линий. Однако цвета теряются при использовании обработчика файла для экспорта в файл журнала и затем tail -f для отслеживания файла.

Можно ли экспортировать форматирование цвета в выходной файл, чтобы tail, less и соавт. может правильно показать это?

Конфигурация на стороне Python выполняется примерно так:

coloredlogs.install(
logger=_logger, fmt='%(asctime)s %(message)s', use_chroot=False,
field_styles={'asctime': {'color': 'cyan'}}, datefmt='%d.%m.%Y %H:%M',
level_styles={
    'info': {'color': 'white', 'bold': False},
    'warn': {'color': 'blue', 'bold': True},
    'error': {'color': 'magenta', 'bold': False}
}

)

Спасибо

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Вы можете отключить автоопределение, если нужно использовать цветной форматер (по умолчанию: в сеансе терминала), установив параметр isatty.

https://coloredlogs.readthedocs.io/en/latest/api.html#coloredlogs.install

короткий пример

import coloredlogs, logging

_logger = logging.getLogger(__name__)

coloredlogs.install(
    logger=_logger, fmt='%(asctime)s %(message)s', use_chroot=False,
    field_styles={'asctime': {'color': 'cyan'}}, datefmt='%d.%m.%Y %H:%M',
    level_styles={
        'info': {'color': 'white', 'bold': False},
        'warn': {'color': 'blue', 'bold': True},
        'error': {'color': 'magenta', 'bold': False}
    },
    isatty=True
)

_logger.debug("a debug message")
_logger.info("an info message")
_logger.warning("a warning message")
_logger.error("an error message")
_logger.critical("a critical message")

При перенаправлении вывода в файл файл будет содержать escape-последовательности ANSI.

00000000  1b 5b 33 36 6d 31 34 2e  31 30 2e 32 30 31 39 20  |.[36m14.10.2019 |
00000010  31 35 3a 31 35 1b 5b 30  6d 20 1b 5b 33 37 6d 61  |15:15.[0m .[37ma|
00000020  6e 20 69 6e 66 6f 20 6d  65 73 73 61 67 65 1b 5b  |n info message.[|
00000030  30 6d 0a 1b 5b 33 36 6d  31 34 2e 31 30 2e 32 30  |0m..[36m14.10.20|
00000040  31 39 20 31 35 3a 31 35  1b 5b 30 6d 20 1b 5b 31  |19 15:15.[0m .[1|
00000050  3b 33 34 6d 61 20 77 61  72 6e 69 6e 67 20 6d 65  |;34ma warning me|
00000060  73 73 61 67 65 1b 5b 30  6d 0a 1b 5b 33 36 6d 31  |ssage.[0m..[36m1|
00000070  34 2e 31 30 2e 32 30 31  39 20 31 35 3a 31 35 1b  |4.10.2019 15:15.|
00000080  5b 30 6d 20 1b 5b 33 35  6d 61 6e 20 65 72 72 6f  |[0m .[35man erro|
00000090  72 20 6d 65 73 73 61 67  65 1b 5b 30 6d 0a 1b 5b  |r message.[0m..[|
000000a0  33 36 6d 31 34 2e 31 30  2e 32 30 31 39 20 31 35  |36m14.10.2019 15|
000000b0  3a 31 35 1b 5b 30 6d 20  61 20 63 72 69 74 69 63  |:15.[0m a critic|
000000c0  61 6c 20 6d 65 73 73 61  67 65 0a                 |al message.|
0 голосов
/ 14 октября 2019

Для этого есть несколько вариантов, вы можете использовать для него функцию sed, например: echo "WARN"|sed 's#WARN#\x1b[34m&#;'

или вы можете использовать grc для этой части, я использую ее когда-нибудь, когдая читаю логи

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