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

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

  • 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

Color

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

import logging
from aiomisc.log import basic_config


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

JSON

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

import logging
from aiomisc.log import basic_config


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

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

Rich

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

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

pip install rich

Примечание

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

import logging
from aiomisc.log import basic_config

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

logging.info("Rich logger")

# Configure rich log handler with rich tracebacks display
basic_config(level=logging.INFO, buffered=False, log_format='rich_tb')

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

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

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

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


# Configure logging globally
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()

    # Configure
    basic_config(
        level=logging.INFO,
        buffered=True,
        log_format='color',
        flush_interval=0.5
    )

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

    # Wait for flush just for example
    loop.run_until_complete(asyncio.sleep(1))

Примечание

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

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