An open API service indexing awesome lists of open source software.

https://github.com/valery1707/log4j-count-appender

Log4j Appender for aggregating log events by level
https://github.com/valery1707/log4j-count-appender

Last synced: about 2 months ago
JSON representation

Log4j Appender for aggregating log events by level

Awesome Lists containing this project

README

        

[![Build Status](https://travis-ci.org/yandex-money-tech/log4j-count-appender.svg?branch=master)](https://travis-ci.org/yandex-money-tech/log4j-count-appender)
[![Build status](https://ci.appveyor.com/api/projects/status/2ee4wumomugjnnl7?svg=true)](https://ci.appveyor.com/project/f0y/log4j-count-appender)
[![codecov](https://codecov.io/gh/yandex-money-tech/log4j-count-appender/branch/master/graph/badge.svg)](https://codecov.io/gh/yandex-money-tech/log4j-count-appender)
[![Codebeat](https://codebeat.co/badges/ff7a4c21-72fb-446c-b245-ba739240fe49)](https://codebeat.co/projects/github-com-yandex-money-log4j-count-appender-master)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Javadoc](https://img.shields.io/badge/javadoc-latest-blue.svg)](https://yandex-money-tech.github.io/log4j-count-appender/)
[![Download](https://api.bintray.com/packages/yandex-money-tech/maven/log4j-count-appender/images/download.svg)](https://bintray.com/yandex-money-tech/maven/log4j-count-appender/_latestVersion)

# Appender для подсчета количества логов и отправки в сокет

## Зачем

Этот Log Appender полезен для случаев, когда необходимо настроить сбор статистики по количеству логов приложения.
Вот несколько примеров, как можно использовать эту статистику:
- обнаруживать аномалии при слишком высоком или слишком низком количестве логов приложения;
- оперативно реагировать на рост логов определнного уровня, таких как WARN и ERROR.

Один из способов собирать такую статистику - это использовать `org.apache.logging.log4j.core.appender.SocketAppender`, однако
его недостаток в том, что он будет слать в сокет по одному событию на каждую запись в лог, что может излишне нагружать сеть и приемник событий
при высоком темпе добвление логов.

Поэтому был создан этот Log Appender, который агрегирует записи в лог и с фиксированной периодичностью пишет в сокет по одному событию с
количеством записей лога на определенном уровне.

## Как работает

SocketLogLevelCountAppender собирает статистику количества событий **LogEvent**, агрегируя по уровню **level**.
С заданной периодичностью происходит запись в сокет событий, содержащих:
- уровень логирования **level**,
- количество событий с момента последней записи в сокет.

**Важно!** Статистика количества событий не гарантирует 100% точность, следует ориентироваться на погрешность в 0.01%
при нагрузке в 100000 событий за 100мс по одному level. Это обусловлено использованием ```LongAdder#sumThenReset()```.

Формат сообщений, попадающих в сокет, следует задавать с помощью PatternLayout, в шаблоне которого
можно использовать параметры **%level** и **%X{count}**.

## Как подключить

Библиотека доступна в [Bintray's JCenter repository](http://jcenter.bintray.com)

```

com.yandex.money.tech
log4j-count-appender
1.1.3

```

Здесь приведен пример конфигурации `log4j2.xml` для отправки метрик в statsd по UDP:
```$xml










```

Список возможных параметров элемента `SocketLogLevelCount`:
- connectTimeout - таймаут установки соединения, мс
- host - хост для отправки пакетов
- port - порт для отправки пакетов
- protocol - UDP или TCP
- sendPeriod - период отправки, мс

# Сборка проекта

См. конфигурации Travis (`.travis.yml`) или AppVeyor (`appveyor.yml`).
В репозитории находятся два gradle-проекта:
- файлы `build.gradle`, `gradlew`, `gradle/wrapper` относятся к проекту для работы во внутренней инфраструктуре Яндекс.Денег;
- файлы `build-public.gradle`, `gradlew-public`, `gradle-public/wrapper` относятся к проекту для работы извне.

# Импорт проекта в IDE

К сожалению на данный момент необходимо перед импортом проекта в Idea заменить файлы:
- `gradle-public/wrapper/gradle-wrapper.properties` на `gradle/wrapper/gradle-wrapper.properties`,
- `build-public.gradle` на `build.gradle`.
Это вызвано багом в Idea: https://github.com/f0y/idea-two-gradle-builds.