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. Буфферизирующий лог-хендлер#

Параметр buffered=True включает буферизацию логов в памяти, отдельный поток переодически сбрасывает логи в поток.

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()