Service de journalisation (logging) professionnel pour IBM i, fourni sous forme de programme de service (*SRVPGM).
LOGFORI est un service de journalisation léger et efficace pour les applications IBM i écrites en ILE RPG. Il offre :
- ✅ Plusieurs niveaux de journalisation (DEBUG, INFO, WARNING, ERROR, FATAL)
- ✅ Configuration dynamique du niveau de log
- ✅ Messages horodatés automatiquement
- ✅ Programme de service réutilisable
- ✅ Thread-safe avec
thread(*serialize) - ✅ Documentation complète en français
- IBM i 7.5 ou supérieur
- Compilateur ILE RPG avec support SQL
- IBM i TOBI installé (gestionnaire de build)
- Accès à QSYS pour créer des objets
# Depuis le répertoire du projet
makei compile
# Compiler et tester
makei test# Spécifier une bibliothèque cible (par défaut : &CURLIB)
makei OBJLIB=MYLIB compilemakei compile- Compile le service LOGGER (*SRVPGM) et le BNDDIRmakei test- Compile le programme de test (TESTLOGGER.PGM)makei example- Compile le programme d'exemplemakei clean- Nettoie les objets compilés
Consultez la documentation TOBI pour des informations détaillées sur le système de build.
**FREE
ctl-opt dftactgrp(*no) actgrp(*new) bnddir('SERVICES');
// Importer l'API LOGGER (prototypes et constantes)
/copy qcpysrc,loggerapi
// Initialiser le service
LoggerInit();
// Écrire un message
LoggerInfo('Application démarrée avec succès');
// Terminer le service
LoggerTerm();
*inlr = *on;**FREE
ctl-opt dftactgrp(*no) actgrp(*new) bnddir('SERVICES');
/copy qcpysrc,loggerapi
// Synchronise automatiquement avec le paramètre LOG du job IBM i
LoggerInitFromJobLog();
LoggerInfo('Niveau ajusté selon LOG du job');
LoggerDebug('Ce message apparaît si LOG(4 00 *SECLVL)');
LoggerTerm();Voir qrpglesrc/EXAMPLE.PGM.SQLRPGLE pour un exemple complet.
**FREE
ctl-opt dftactgrp(*no) actgrp(*new) bnddir('SERVICES');
/copy qcpysrc,loggerapi // Importe les constantes et prototypes
LoggerInit();
// Tous les niveaux disponibles
LoggerDebug('Détails de débogage');
LoggerInfo('Information générale');
LoggerWarning('Attention, situation inhabituelle');
LoggerError('Erreur récupérable');
LoggerFatal('Erreur fatale, arrêt nécessaire');
// Changer le niveau de log (seuls ERROR et FATAL seront affichés)
LoggerSetLevel(LOG_LEVEL_ERROR);
LoggerTerm();Un programme de test complet est fourni dans qrpglesrc/TESTLOGGER.PGM.RPGLE. Pour le compiler et l'exécuter :
# Compiler avec TOBI
makei test
# Exécuter le programme de test
system "CALL &CURLIB/TESTLOGGER"La commande makei test compile le service LOGGER et le programme de test. Vous devez ensuite exécuter manuellement le programme.
Initialise le service de journalisation avec le niveau INFO par défaut. Doit être appelé avant toute autre fonction.
Initialise le service et synchronise automatiquement le niveau de journalisation avec le paramètre LOG du job IBM i courant.
Mapping LOG → LOGFORI :
LOG(4 00 *SECLVL)→LOG_LEVEL_DEBUG(tous messages + détails)LOG(* 00-19 *)→LOG_LEVEL_INFO(messages informatifs)LOG(* 20-29 *)→LOG_LEVEL_WARNING(avertissements)LOG(* 30-39 *)→LOG_LEVEL_ERROR(erreurs)LOG(* 40+ *)→LOG_LEVEL_FATAL(erreurs critiques)
Utilisation recommandée dans les jobs SBMJOB :
/* Développement/Debug */
SBMJOB CMD(CALL PGM(MONPROG)) LOG(4 00 *SECLVL)
/* Production normale */
SBMJOB CMD(CALL PGM(MONPROG)) LOG(4 00 *MSG)
/* Surveillance critique uniquement */
SBMJOB CMD(CALL PGM(MONPROG)) LOG(3 30 *MSG)Termine le service de journalisation proprement.
Enregistre un message de débogage (niveau 0).
- Paramètre :
message- Message à enregistrer (VARCHAR 512)
Enregistre un message d'information (niveau 1).
- Paramètre :
message- Message à enregistrer (VARCHAR 512)
Enregistre un message d'avertissement (niveau 2).
- Paramètre :
message- Message à enregistrer (VARCHAR 512)
Enregistre un message d'erreur (niveau 3).
- Paramètre :
message- Message à enregistrer (VARCHAR 512)
Enregistre un message d'erreur fatale (niveau 4).
- Paramètre :
message- Message à enregistrer (VARCHAR 512)
Définit le niveau minimum de journalisation.
- Paramètre :
level- Niveau (0=DEBUG, 1=INFO, 2=WARNING, 3=ERROR, 4=FATAL)
Retourne le niveau de journalisation actuel.
- Retour : Niveau actuel (INT 10)
logfori/
├── qrpglesrc/ # Sources RPG
│ ├── LOGGER.SQLRPGLE # Module principal du service de log
│ ├── TESTLOGGER.PGM.RPGLE # Programme de test
│ ├── EXAMPLE.PGM.SQLRPGLE # Programme d'exemple
│ └── Rules.mk # Règles de build TOBI
├── qsrvsrc/ # Sources service program
│ ├── LOGGER.BND # Définition des exports
│ └── Rules.mk # Règles de build TOBI
├── qbndsrc/ # Binding directories
│ ├── SERVICES.BNDDIR # Définition du BNDDIR
│ └── Rules.mk # Règles de build TOBI
├── qcpysrc/ # Fichiers de copie
│ └── LOGGERAPI.RPGLEINC # API publique (prototypes et constantes)
├── iproj.json # Configuration du projet TOBI
├── Rules.mk # Règles de build racine
├── README.md # Documentation principale
├── CONTRIBUTING.md # Guide de contribution
├── CHANGELOG.md # Historique des versions
└── LICENSE # Licence Apache 2.0
Le système de niveaux permet de filtrer les messages :
// Niveau INFO : affiche INFO, WARNING, ERROR, FATAL (pas DEBUG)
LoggerSetLevel(LOG_LEVEL_INFO);
// Niveau WARNING : affiche seulement WARNING, ERROR, FATAL
LoggerSetLevel(LOG_LEVEL_WARNING);
// Niveau ERROR : affiche seulement ERROR et FATAL
LoggerSetLevel(LOG_LEVEL_ERROR);Pour les jobs planifiés (via SBMJOB ou ADDJOBSCDE), utilisez LoggerInitFromJobLog() pour une configuration automatique :
**FREE
ctl-opt dftactgrp(*no) actgrp(*new) bnddir('SERVICES');
/copy qcpysrc,loggerapi
// Le niveau sera automatiquement ajusté selon le LOG du job
LoggerInitFromJobLog();
LoggerInfo('Job planifié démarré');
LoggerDebug('Détails visibles uniquement en mode DEBUG');
// Traitement...
LoggerTerm();Avantages :
- Configuration centralisée dans la description du job
- Pas de recompilation pour changer le niveau de log
- Cohérence avec les standards IBM i
- Adaptation automatique selon l'environnement (DEV/TEST/PROD)
Le module est compilé avec thread(*serialize), ce qui garantit que les écritures dans le journal sont sérialisées et ne se chevauchent pas dans un environnement multi-thread.
Les messages sont automatiquement formatés avec :
- Horodatage (timestamp ISO)
- Niveau de log entre crochets
- Message utilisateur
Exemple :
2025-12-20-15.30.45.123456 [INFO] Application démarrée avec succès
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche pour votre fonctionnalité
- Committer vos changements
- Pousser vers la branche
- Ouvrir une Pull Request
Ce projet est sous licence Apache 2.0. Voir le fichier LICENSE pour plus de détails.
- IBM i Services
- IBM i TOBI - Documentation - Système de build utilisé
- IBM i TOBI - GitHub - Code source et issues
- IBM i Documentation
- ILE RPG Reference
- Service Programs
- Le service écrit actuellement dans le joblog via
Qp0zLprintf - Pour écrire dans QSYSOPR, décommenter la section correspondante dans
writeLog() - Testé sur IBM i 7.3+
- Supporte les caractères Unicode et les caractères spéciaux français