opensearch-log
opensearch-log
- это Python log handler, предназначенный для прямой и эффективной передачи логов в
OpenSearch или AWS CloudWatch.
Также он может быть использован для JSON логирования в stdout.
Используя контекстный менеджер или декоратор, можно легко добавить дополнительные поля к сообщениям логов.
Установка
Для установки opensearch-log
выполните следующую команду:
pip install -e ".[cloudwatch,opensearch]"
Если вам нужны только CloudWatch или только OpenSearch, оставьте только их в списке расширений. Для логирования в формате JSON в stdout никаких дополнений не требуется.
Настройка логгера
Для глобальной конфигурации логгера используйте соответствующую функцию get_logger
в зависимости
от того, куда вы собираетесь отправлять логи.
Эта функция не только возвращает настроенный логгер, но и конфигурирует логгер по умолчанию,
гарантируя, что последующие вызовы logging.getLogger()
вернут тот же экземпляр логгера.
Отправка логов в OpenSearch
Для отправки логов в OpenSearch используйте get_logger() из opensearch_handler:
from opensearch_log import Logging
from opensearch_log.opensearch_handler import get_logger
logger = get_logger(index_name="myindex", echo_stdout=True)
with Logging(my_log_field="Из Python"):
logger.info("Привет, мир")
Это передаст в OpenSearch запись, которая выглядит так (вывод сокращен для удобочитаемости):
{
"_index": "myindex-2023.12.16",
"_source": {
"@timestamp": "2023-12-16T06:39:19.479Z",
"msg": "Привет, мир",
"my_log_field": "Из Python"
}
}
Одновременно это будет выведено в терминале (вывод сокращен для удобочитаемости):
{
"message": "Привет, мир",
"name": "root",
"my_log_field": "Из Python"
}
Отправка логов в AWS CloudWatch
Для логирования в AWS CloudWatch используйте get_logger() из cloudwatch_handler:
from opensearch_log.cloudwatch_handler import get_logger
logger = get_logger(index_name="myindex", echo_stdout=True)
JSON логирование в stdout
Для приложений, требующих только JSON логирования без необходимости отправки логов в OpenSearch или AWS CloudWatch, get_logger() из stdout_handler:
from opensearch_log.stdout_handler import get_logger
logger = get_logger(index_name="myindex", echo_stdout=True)
Добавление полей к логам
Дополнение логов полями может быть достигнуто с использованием декоратора, контекстного менеджера или простых вызовов функций.
После этого поля будут добавлены во все сообщения логов.
Контекстный менеджер
from opensearch_log import Logging
with Logging(my_log_field="Из Python"):
logger.info("Привет, мир")
Декоратор
from opensearch_log import log_fields
@log_fields(my_log_field="Из Python")
def my_func():
logger.info("Привет, мир")
Простые функции
from opensearch_log import add_log_fields, remove_log_fields
added_fields = add_log_fields(my_log_field="Из Python")
try:
logger.info("Привет, мир")
finally:
remove_log_fields(*added_fields)