2.18. Конфигурация логирования

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

  • AIOMISC_LOG_LEVEL - уровень логирования по умолчанию

  • AIOMISC_LOG_FORMAT - формат логирования по умолчанию

  • AIOMISC_LOG_CONFIG - следует ли настраивать логирование

  • AIOMISC_LOG_FLUSH - интервал сброса буфера логов logs

  • AIOMISC_LOG_BUFFER - максимальный размер буфера логов

$ export AIOMISC_LOG_LEVEL=debug
$ export AIOMISC_LOG_FORMAT=rich

2.18.1. Color

Настройка цветных логов:

import logging
from aiomisc.log import basic_config


# Configure logging
basic_config(level=logging.INFO, buffered=False, log_format='color')

2.18.2. JSON

Настройка json логов:

import logging
from aiomisc.log import basic_config


# Configure logging
basic_config(level=logging.INFO, buffered=False, log_format='json')

2.18.3. JournalD

JournalD демон для сбора логов он является частью systemd. aiomisc.basic_config может писать логи в JournalD.

Примечание

Этот обработчик выбирается по умолчанию если программа запускается как systemd сервис.

aiomisc.log.LogFormat.default() вернет journald в этом случае.

import logging
from aiomisc.log import basic_config

# Configure rich log handler
basic_config(level=logging.INFO, buffered=False, log_format='journald')

logging.info("JournalD log record")

2.18.4. Rich

Rich это Python библиотека которая делает форматирование в терминал прекрасным.

aiomisc.basic_config может использовать Rich для логирования. Но это не обязательно, поэтому вам придется установить Rich самостоятельно.

pip install rich

Примечание

Этот обработчик будет обработчиком по умолчанию если Rich установлен.

import logging
from aiomisc.log import basic_config

# Конфигурируем rich обработчик для журналов
basic_config(level=logging.INFO, buffered=False, log_format='rich')

logging.info("Rich logger")

# Конфигурируем rich обработчик для журналов но с показом трейсбеков
basic_config(level=logging.INFO, buffered=False, log_format='rich_tb')

try:
    1 / 0
except:
    logging.exception("Rich traceback logger")

2.18.5. Disabled

Disable to configure logging handler. Useful when you want to configure your own logging handlers using handlers= argument.

import logging
from aiomisc.log import basic_config

# Configure rich log handler
basic_config(
    level=logging.INFO,
    log_format='disabled',
    handlers=[logging.StreamHandler()],
    buffered=False,
)

logging.info("Use default python logger for example")

2.18.6. Буфферизирующий лог-хендлер

Parameter buffered=True enables a memory buffer that flushes logs in a thread. In case the handlers= each will be buffered.

import asyncio
import logging
from aiomisc.log import basic_config
from aiomisc.periodic import PeriodicCallback
from aiomisc.utils import new_event_loop


# Глобально конфигурируем журналы
basic_config(level=logging.INFO, buffered=False, log_format='json')

async def write_log(loop):
    logging.info("Hello %f", loop.time())

if __name__ == '__main__':
    loop = new_event_loop()

    # Конфигурируем
    basic_config(
        level=logging.INFO,
        buffered=True,
        log_format='color',
        flush_interval=0.5
    )

    periodic = PeriodicCallback(write_log, loop)
    periodic.start(0.3)

    # Ждем пока журналы не попадут в журнал
    loop.run_until_complete(asyncio.sleep(1))

Примечание

entrypoint принимает аргумент log_format через который можно это настроить.

Список всех поддерживаемых форматов журналов доступен через aiomisc.log.LogFormat.choices()