{"id":22824385,"url":"https://github.com/opt-nc/opt-logging","last_synced_at":"2025-09-09T22:03:43.440Z","repository":{"id":37826490,"uuid":"295623412","full_name":"opt-nc/opt-logging","owner":"opt-nc","description":"La librairie de référence pour générer des logs bien formatées à l'OPT.","archived":false,"fork":false,"pushed_at":"2024-04-16T02:50:07.000Z","size":221,"stargazers_count":0,"open_issues_count":7,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-31T00:18:58.505Z","etag":null,"topics":["glia","logging","logging-library","socle-opt"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opt-nc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-15T05:26:14.000Z","updated_at":"2022-11-03T22:01:05.000Z","dependencies_parsed_at":"2024-12-12T17:17:54.556Z","dependency_job_id":null,"html_url":"https://github.com/opt-nc/opt-logging","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/opt-nc/opt-logging","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opt-nc%2Fopt-logging","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opt-nc%2Fopt-logging/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opt-nc%2Fopt-logging/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opt-nc%2Fopt-logging/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opt-nc","download_url":"https://codeload.github.com/opt-nc/opt-logging/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opt-nc%2Fopt-logging/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274368366,"owners_count":25272398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["glia","logging","logging-library","socle-opt"],"created_at":"2024-12-12T17:06:29.922Z","updated_at":"2025-09-09T22:03:43.348Z","avatar_url":"https://github.com/opt-nc.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![](https://jitpack.io/v/opt-nc/opt-logging.svg)](https://jitpack.io/#opt-nc/opt-logging)\n\n[![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-white.svg)](https://sonarcloud.io/summary/new_code?id=opt-nc_opt-logging)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=opt-nc_opt-logging\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=opt-nc_opt-logging)\n\n# ❔ `opt-logging`\n\nCette librairie contient les 2 fichiers de configuration de [logback](http://logback.qos.ch/) préconisés pour\nles développements d'application à l'[OPT-NC](https://github.com/opt-nc).\n\nToutes les logs sont dans le même fichier `.log (${LOG_FILE})` à l'exception des logs métiers qui se\ntrouvent dans un seul fichier `.json` `(${LOG_FILE_JSON})` si le besoin est exprimé.\n\n## ⬇️ Import de la dépendance publique\n\nCette dépendance est disponible publiquement via [Jitpack](https://jitpack.io/#opt-nc/opt-logging).\n\n### 🪶 Maven\n\nAjouter la repo [Jitpack](https://jitpack.io/) :\n\n```xml\n\u003crepositories\u003e\n  \u003crepository\u003e\n    \u003cid\u003ejitpack.io\u003c/id\u003e\n    \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n  \u003c/repository\u003e\n\u003c/repositories\u003e\n```\n\nPuis la dépedance : \n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.opt-nc\u003c/groupId\u003e\n  \u003cartifactId\u003eopt-logging\u003c/artifactId\u003e\n  \u003cversion\u003eTag\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 🐘 Gradle\n\nAjouter la repo :\n\n```\nallprojects {\n  repositories {\n\t\t\t...\n  maven { url 'https://jitpack.io' }\n\t\t}\n}\n````\n\nPuis la dépendance :\n\n```\ndependencies {\n  implementation 'com.github.opt-nc:opt-logging:Tag'\n}\n```\n\n## :octocat: Import de la dépendance via GH Packages\n\n### 🐘 Gradle\n\nAjouter la dépendance suivante dans votre build.gradle :\n\n```gradle\ncompile group: 'nc.opt.core', name: 'opt-logging', version: '${opt-logging.verion}'\n```\n\n### 🪶 Maven\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003enc.opt.core\u003c/groupId\u003e\n  \u003cartifactId\u003eopt-logging\u003c/artifactId\u003e\n  \u003cversion\u003e${opt-logging.version}\u003c/version\u003e\n\u003c/dependency\u003e \n```\n\n## Configuration du logback\n\n### Inclusion de la configuration par défaut\n\nContenu du fichier `src/main/resources/logback-spring.xml` :\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n  \u003cconfiguration scan=\"true\"\u003e\n  \u003cproperty name=\"LOG_FILE\" value=\"${LOG_FILE}\"/\u003e\n  \u003cproperty name=\"MAX_HISTORY\" value=\"${MAX_HISTORY}\"/\u003e\n  \u003cproperty name=\"MAX_FILE_SIZE\" value=\"${MAX_FILE_SIZE}\"/\u003e\n  \u003cproperty name=\"TOTAL_SIZE_CAP\" value=\"${TOTAL_SIZE_CAP}\"/\u003e\n  \u003cinclude resource=\"nc/opt/core/logging/logs-defaults.xml\" /\u003e\n\u003c/configuration\u003e\n```\n\n### Inclusion de la configuration pour les logs métiers\n\n```xml\n\u003cproperty name=\"LOG_FILE_JSON\" value=\"${LOG_FILE_JSON}\"/\u003e\n\u003cinclude resource=\"nc/opt/core/logging/logs-metiers.xml\" /\u003e\n```\n\n## 📑 Fonctionnalités\n\n### Logs classiques\n\nDans la configuration par défaut en version `1.3.0` :\n\n1. La rotation de logs est configurée dans les fichier de la librairie. on utilise [SizeAndTimeBasedRollingPolicy](https://logback.qos.ch/manual/appenders.html)\n2. Avec le profil 'dev' les logs s'affichent uniquement dans la console, les variables d'environnement sont donc facultatives\n3. Avec un profil différent de `dev` les logs s'affichent uniquement dans les fichiers et il faut définir les variables d'environnement\n4. Le rootLogger est par défaut à `INFO`\n\n\n### Logs métiers\n\nDans la configuration des logs métiers en version `1.3.0` :\n\n- La rotation de logs est configurée dans les fichier de la librairie. on utilise [SizeAndTimeBasedRollingPolicy](https://logback.qos.ch/manual/appenders.html)\n- Quelque soit le profil les logs sont générés dans le fichier\n- Le Logger métier est par défaut à `INFO`\n\n\n### Variables d'environnement\n\n4 variables d'environnement sont nécessaires avec un profil non dev : \n\n- `LOG_FILE` : contient le path vers le fichier des logs classiques\n- Les logs classiques sont les fichiers de logs java de base\n- La variable doit se terminer par `.log`\n- `MAX_HISTORY` : Nombre de fichiers max à garder pour historique. A savoir que **la rotation est effectuée par jour et par taille**\n- `MAX_FILE_SIZE` : Taille max d'un fichier pour la rotation (ex : `100MB`)\n- `TOTAL_SIZE_CAP` : Taille max de la somme des fichiers présents (ex : `5GB`)\n\n\nUne variable supplémentaire est nécessaire si on veut utiliser le service de log métier :\n\n- [x] `LOG_FILE_JSON` : contient le path vers le fichier des logs métiers\n- [x] Les logs métiers servent à logguer des objets directement en `json`\n- [x] La variable doit se terminer par `.json`\n\n\n## ❔ How to log\n\n### Utilisation des logs classiques\n\n#### Déclaration\n\n- L'API de log est org.slf4j.slf4j-api\n- On déclare un logger par classe\n- Un logger est déclaré de la [manière suivante](https://wiki.apache.org/commons/Logging/StaticLog) (et non de manière statique)\n\n```java\nprivate final Logger log = LoggerFactory.getLogger(MaClasse.class);\n```\n\n#### Format des logs produites\n\nLe fichier est un fichier `.log` avec une ligne par log de la forme suivante :\n\n```\n2017-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\n2017-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\n```\n\n👉 **Le fichier peut contenir des logs multi lignes en cas de stack trace java.**\n\n### Utilisation du service de log métier\n\n#### Déclaration\n\n```java\n@Autowired\nprivate LogMetierService logMetierService;\n```\n\n#### Utilisation\n\n```java\nlogMetierService.logObject(\"pays\", new Pays());\n```\n\n#### Format des logs produites\n\nLe fichier est un fichier `.json` avec une ligne par log de la forme suivante :\n\n```json\n{\"@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}\n{\"@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}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopt-nc%2Fopt-logging","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopt-nc%2Fopt-logging","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopt-nc%2Fopt-logging/lists"}