Cette librairie contient les 2 fichiers de configuration de logback préconisés pour les développements d'application à l'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é.
Cette dépendance est disponible publiquement via Jitpack.
Ajouter la repo Jitpack :
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Puis la dépedance :
<dependency>
<groupId>com.github.opt-nc</groupId>
<artifactId>opt-logging</artifactId>
<version>Tag</version>
</dependency>
Ajouter la repo :
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Puis la dépendance :
dependencies {
implementation 'com.github.opt-nc:opt-logging:Tag'
}
Ajouter la dépendance suivante dans votre build.gradle :
compile group: 'nc.opt.core', name: 'opt-logging', version: '${opt-logging.verion}'
<dependency>
<groupId>nc.opt.core</groupId>
<artifactId>opt-logging</artifactId>
<version>${opt-logging.version}</version>
</dependency>
Contenu du fichier src/main/resources/logback-spring.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<property name="LOG_FILE" value="${LOG_FILE}"/>
<property name="MAX_HISTORY" value="${MAX_HISTORY}"/>
<property name="MAX_FILE_SIZE" value="${MAX_FILE_SIZE}"/>
<property name="TOTAL_SIZE_CAP" value="${TOTAL_SIZE_CAP}"/>
<include resource="nc/opt/core/logging/logs-defaults.xml" />
</configuration>
<property name="LOG_FILE_JSON" value="${LOG_FILE_JSON}"/>
<include resource="nc/opt/core/logging/logs-metiers.xml" />
Dans la configuration par défaut en version 1.3.0
:
- La rotation de logs est configurée dans les fichier de la librairie. on utilise SizeAndTimeBasedRollingPolicy
- Avec le profil 'dev' les logs s'affichent uniquement dans la console, les variables d'environnement sont donc facultatives
- Avec un profil différent de
dev
les logs s'affichent uniquement dans les fichiers et il faut définir les variables d'environnement - Le rootLogger est par défaut à
INFO
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
- Quelque soit le profil les logs sont générés dans le fichier
- Le Logger métier est par défaut à
INFO
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 tailleMAX_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 :
-
LOG_FILE_JSON
: contient le path vers le fichier des logs métiers - Les logs métiers servent à logguer des objets directement en
json
- La variable doit se terminer par
.json
- 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 (et non de manière statique)
private final Logger log = LoggerFactory.getLogger(MaClasse.class);
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.
@Autowired
private LogMetierService logMetierService;
logMetierService.logObject("pays", new Pays());
Le fichier est un fichier .json
avec une ligne par log de la forme suivante :
{"@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}