https://github.com/romanow/log4j2-masking-lib
Masking library for Log4j2
https://github.com/romanow/log4j2-masking-lib
log4j2 masking
Last synced: about 1 year ago
JSON representation
Masking library for Log4j2
- Host: GitHub
- URL: https://github.com/romanow/log4j2-masking-lib
- Owner: Romanow
- License: mit
- Created: 2024-05-14T13:52:19.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2025-06-10T11:45:27.000Z (about 1 year ago)
- Last Synced: 2025-06-10T12:19:14.693Z (about 1 year ago)
- Topics: log4j2, masking
- Language: Kotlin
- Homepage: https://romanow.github.io/log4j2-masking/
- Size: 97.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/Romanow/log4j2-masking-lib/actions/workflows/build.yml)
[](https://github.com/pre-commit/pre-commit)
[](https://github.com/Romanow/log4j2-masking-lib/releases/latest)
[](https://codecov.io/gh/Romanow/log4j2-masking-lib)
[](https://github.com/Romanow/log4j2-masking-lib/blob/master/LICENSE)
# Masking library for Log4j2
## Подключение
### Maven
```xml
ru.romanow.logging
log4j2-masking-lib
${log-masking-lib.version}
```
### Gradle
```groovy
testImplementation "ru.romanow.logging:log4j2-masking-lib:$logMaskingVersion"
```
## Реализация
Для маскирования логов используется
плагин [`MaskingConverter`](src/main/kotlin/ru/romanow/logging/filter/MaskingConverter.kt).
Для его подключения используется annotation processor `org.apache.logging.log4j:log4j-core`, который собирает плагины
в [`$buildDir/tmp/kapt3/classes/main/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat`](build/tmp/kapt3/classes/main/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat).
В шаблоне этот конвертер вызывается как `%mask{ %msg }`:
```xml
```
## Правила маскирования
Тип поля:
* `email` –> `romanowalex@mail.ru` -> `r**********@mail.ru`.
* `firstName` –> не маскируется.
* `lastName`, `middleName` –> if (name.length > 7) `Ab*****c` else `A*****`.
* `text` –> в зависимости от длины:
* 1 -> `*`;
* 1..4 -> `1234` -> `1***`;
* 5..9 -> `123456789` -> `1******89` (length * 60%);
* 10..15 -> `12345678901` -> `12*******01` (length * 60%);
* 16 + -> `12345678901234567` -> `123***********567` (length * 60%);
Правила описаны в [`resources/logging/rules.yml`](src/main/resources/logging/rules.yml). Если требуется добавить новые
правила, то нужно в `resources/logging` создать файл `additional-rules.yml`.
```yaml
masking:
- field: 'fullName'
type: FULL_NAME
- field: 'lastName'
type: NAME
- field: 'email'
type: EMAIL
- field: 'JWT'
type: TEXT
- regex: '(?:JWT|Authorization)\s*(?::|=)\s*(.+)'
type: TEXT
```