Il y a des moments où vous voulez voir quel processus prend beaucoup de temps (ou est arrêté), comme dans un processus par lots Java chronophage.
Cependant, lors de l'incorporation d'un journal pendant le traitement, il faut beaucoup d'expérience pour déterminer le point et la taille du grain. De plus, si vous vous arrêtez à un moment donné pendant une longue période, rien ne sera affiché dans le journal.
Je voulais pouvoir enregistrer régulièrement des informations sur l'exécution des lignes.
Pour cette raison, c'est un projet très simple, mais j'ai créé un heartbeat-logger
pour y arriver.
https://github.com/flyaway2112/heartbeat-logger
Même si vous n'incorporez pas le journal séquentiel, vous pouvez périodiquement sortir le journal en cours de traitement comme indiqué ci-dessous.
2020-7-01 00:11:23.881 [pool-1-thread-1] DEBUG com.example.LargeBatch - Start heartbeat logger
2020-7-01 00:11:23.883 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess1(LargeBatch.java:22)
2020-7-01 00:11:23.983 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess1(LargeBatch.java:22)
2020-7-01 00:11:24.084 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess2(LargeBatch.java:26)
2020-7-01 00:11:24.185 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess2(LargeBatch.java:26)
2020-7-01 00:11:24.286 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess2(LargeBatch.java:26)
2020-7-01 00:11:24.386 [pool-1-thread-1] INFO com.example.LargeBatch - com.example.LargeBatch.doLargeProcess2(LargeBatch.java:26)
2020-7-01 00:11:24.480 [pool-1-thread-1] DEBUG com.example.LargeBatch - Shutdown heartbeat logger
SLF4J Il peut être utilisé à partir d'une interface similaire.
HeartBeatLogger logger = HeartBeatLoggerFactory.getLogger(this.getClass(), "com.example", 100);
Le premier argument de la méthode getLogger est la méthode SLF4J LoggerFactpry.getLogger (Class). Comme pour l'argument de, transmettez la classe à utiliser comme nom de Logger de SLF4J. Vous pouvez l'utiliser de la même manière que Lors de l'obtention de Logger avec SLF4J.
Le deuxième argument est le nom du package (correspondance de préfixe) à afficher dans le journal comme "traitement en cours".
Dans le cas de l'exemple ci-dessus, il est sorti dans le journal de la fin de la trace de pile au traitement du package com.example
.
Il s'agit d'un mécanisme pour éviter le problème suivant: «même si les informations de la classe standard Java ou de la méthode de bibliothèque sont sorties, on ne sait pas à partir de quel processus du projet il est exécuté».
Si null est passé, la fin de la trace de pile sera sortie.
Le troisième argument est l'intervalle de sortie du journal (millisecondes).
try {
logger.start();
//Traitement de la cible de sortie du journal ici
} finally {
logger.shutdown();
}
Entre le moment où vous appelez la méthode de démarrage et le moment où vous appelez la méthode d'arrêt, le journal est automatiquement généré à l'intervalle défini.
Recommended Posts