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
- Host: GitHub
- URL: https://github.com/valery1707/log4j-count-appender
- Owner: valery1707
- License: mit
- Created: 2019-01-18T11:57:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-01-21T13:09:49.000Z (over 6 years ago)
- Last Synced: 2025-01-23T05:24:04.994Z (3 months ago)
- Language: Java
- Homepage:
- Size: 151 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
[](https://travis-ci.org/yandex-money-tech/log4j-count-appender)
[](https://ci.appveyor.com/project/f0y/log4j-count-appender)
[](https://codecov.io/gh/yandex-money-tech/log4j-count-appender)
[](https://codebeat.co/projects/github-com-yandex-money-log4j-count-appender-master)
[](https://opensource.org/licenses/MIT)
[](https://yandex-money-tech.github.io/log4j-count-appender/)
[](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.