https://github.com/opt-nc/opt-logging
La librairie de référence pour générer des logs bien formatées à l'OPT.
https://github.com/opt-nc/opt-logging
glia logging logging-library socle-opt
Last synced: 9 months ago
JSON representation
La librairie de référence pour générer des logs bien formatées à l'OPT.
- Host: GitHub
- URL: https://github.com/opt-nc/opt-logging
- Owner: opt-nc
- Created: 2020-09-15T05:26:14.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2024-04-16T02:50:07.000Z (about 2 years ago)
- Last Synced: 2025-03-31T00:18:58.505Z (about 1 year ago)
- Topics: glia, logging, logging-library, socle-opt
- Language: Java
- Homepage:
- Size: 216 KB
- Stars: 0
- Watchers: 4
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://github.com/semantic-release/semantic-release)
[](https://jitpack.io/#opt-nc/opt-logging)
[](https://sonarcloud.io/summary/new_code?id=opt-nc_opt-logging)
[](https://sonarcloud.io/summary/new_code?id=opt-nc_opt-logging)
# ❔ `opt-logging`
Cette librairie contient les 2 fichiers de configuration de [logback](http://logback.qos.ch/) préconisés pour
les développements d'application à l'[OPT-NC](https://github.com/opt-nc).
Toutes les logs sont dans le même fichier `.log (${LOG_FILE})` à l'exception des logs métiers qui se
trouvent dans un seul fichier `.json` `(${LOG_FILE_JSON})` si le besoin est exprimé.
## ⬇️ Import de la dépendance publique
Cette dépendance est disponible publiquement via [Jitpack](https://jitpack.io/#opt-nc/opt-logging).
### 🪶 Maven
Ajouter la repo [Jitpack](https://jitpack.io/) :
```xml
jitpack.io
https://jitpack.io
```
Puis la dépedance :
```xml
com.github.opt-nc
opt-logging
Tag
```
### 🐘 Gradle
Ajouter la repo :
```
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
````
Puis la dépendance :
```
dependencies {
implementation 'com.github.opt-nc:opt-logging:Tag'
}
```
## :octocat: Import de la dépendance via GH Packages
### 🐘 Gradle
Ajouter la dépendance suivante dans votre build.gradle :
```gradle
compile group: 'nc.opt.core', name: 'opt-logging', version: '${opt-logging.verion}'
```
### 🪶 Maven
```xml
nc.opt.core
opt-logging
${opt-logging.version}
```
## Configuration du logback
### Inclusion de la configuration par défaut
Contenu du fichier `src/main/resources/logback-spring.xml` :
```xml
```
### Inclusion de la configuration pour les logs métiers
```xml
```
## 📑 Fonctionnalités
### Logs classiques
Dans la configuration par défaut en version `1.3.0` :
1. La rotation de logs est configurée dans les fichier de la librairie. on utilise [SizeAndTimeBasedRollingPolicy](https://logback.qos.ch/manual/appenders.html)
2. Avec le profil 'dev' les logs s'affichent uniquement dans la console, les variables d'environnement sont donc facultatives
3. Avec un profil différent de `dev` les logs s'affichent uniquement dans les fichiers et il faut définir les variables d'environnement
4. Le rootLogger est par défaut à `INFO`
### Logs métiers
Dans la configuration des logs métiers en version `1.3.0` :
- La rotation de logs est configurée dans les fichier de la librairie. on utilise [SizeAndTimeBasedRollingPolicy](https://logback.qos.ch/manual/appenders.html)
- Quelque soit le profil les logs sont générés dans le fichier
- Le Logger métier est par défaut à `INFO`
### Variables d'environnement
4 variables d'environnement sont nécessaires avec un profil non dev :
- `LOG_FILE` : contient le path vers le fichier des logs classiques
- Les logs classiques sont les fichiers de logs java de base
- La variable doit se terminer par `.log`
- `MAX_HISTORY` : Nombre de fichiers max à garder pour historique. A savoir que **la rotation est effectuée par jour et par taille**
- `MAX_FILE_SIZE` : Taille max d'un fichier pour la rotation (ex : `100MB`)
- `TOTAL_SIZE_CAP` : Taille max de la somme des fichiers présents (ex : `5GB`)
Une variable supplémentaire est nécessaire si on veut utiliser le service de log métier :
- [x] `LOG_FILE_JSON` : contient le path vers le fichier des logs métiers
- [x] Les logs métiers servent à logguer des objets directement en `json`
- [x] La variable doit se terminer par `.json`
## ❔ How to log
### Utilisation des logs classiques
#### Déclaration
- L'API de log est org.slf4j.slf4j-api
- On déclare un logger par classe
- Un logger est déclaré de la [manière suivante](https://wiki.apache.org/commons/Logging/StaticLog) (et non de manière statique)
```java
private final Logger log = LoggerFactory.getLogger(MaClasse.class);
```
#### Format des logs produites
Le fichier est un fichier `.log` avec une ligne par log de la forme suivante :
```
2017-09-19 10:01:27,213 [http-nio-5001-exec-9] [INFO ] nc.opt.kafka.otrs.controller.ProducerOtrsController - Publication d'un message KAFKA depuis OTRS
2017-09-19 10:01:27,273 [StreamThread-1] [INFO ] nc.opt.kafka.wfm.service.impl.WfmServiceImpl - TypeTCRM=THDF | Produit=null | Queue=Telecom::CPMC::IC::RLB | TypeId=10
```
👉 **Le fichier peut contenir des logs multi lignes en cas de stack trace java.**
### Utilisation du service de log métier
#### Déclaration
```java
@Autowired
private LogMetierService logMetierService;
```
#### Utilisation
```java
logMetierService.logObject("pays", new Pays());
```
#### Format des logs produites
Le fichier est un fichier `.json` avec une ligne par log de la forme suivante :
```json
{"@timestamp": "2017-09-01T12:47:15.503+11:00","@version": 1,"pays": {"id": 1,"libelle": "France"},"logger_name": "jsonLogger","thread_name": "http - nio - 8084 - exec - 1","level": "INFO","level_value ": 20000}
{"@timestamp": "2017-09-01T12:47:15.503+11:00","@version": 1,"commune": {"id": 1,"libelle": "Nouméa","province": "SUD","cp": "98800"},"logger_name": "jsonLogger","thread_name": "http - nio - 8084 - exec - 1 ","level": "INFO","level_value ": 20000}
```