Es gibt Zeiten, in denen Sie sehen möchten, welcher Prozess lange dauert (oder gestoppt wird), z. B. in einem zeitaufwändigen Java-Batch-Prozess.
Beim Einbetten eines Protokolls während der Verarbeitung ist jedoch viel Erfahrung erforderlich, um den Punkt und die Korngröße zu bestimmen. Wenn Sie längere Zeit an einem bestimmten Punkt anhalten, wird nichts in das Protokoll ausgegeben.
Ich wollte in der Lage sein, regelmäßig Informationen über das Ausführen von Zeilen zu protokollieren. Aus diesem Grund ist es ein sehr einfaches Projekt, aber ich habe einen "Heartbeat-Logger" erstellt, um dies zu ermöglichen. https://github.com/flyaway2112/heartbeat-logger
Sie können das zu verarbeitende Protokoll regelmäßig wie unten gezeigt ausgeben, ohne das sequentielle Protokoll einzubetten.
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 Es kann über eine ähnliche Schnittstelle verwendet werden.
HeartBeatLogger logger = HeartBeatLoggerFactory.getLogger(this.getClass(), "com.example", 100);
Das erste Argument der getLogger-Methode ist die SLF4J-Methode LoggerFactpry.getLogger (Class). Übergeben Sie wie beim Argument von die Klasse, die als Logger-Name von SLF4J verwendet werden soll. Sie können es auf die gleiche Weise wie Wenn Sie Logger mit SLF4J erhalten verwenden.
Das zweite Argument ist der Paketname (Präfixübereinstimmung), der als "Verarbeitung läuft" in das Protokoll ausgegeben wird. Im Fall des obigen Beispiels wird es vom Ende der Stapelverfolgung bis zur Verarbeitung des Pakets "com.example" in das Protokoll ausgegeben. Dies ist ein Mechanismus, um das Problem zu vermeiden, dass "selbst wenn die Informationen der Java-Standardklasse oder der Bibliotheksmethode ausgegeben werden, nicht bekannt ist, von welchem Prozess des Projekts es ausgeführt wird". Wenn null übergeben wird, wird das Ende der Stapelverfolgung ausgegeben.
Das dritte Argument ist das Protokollausgabeintervall (Millisekunden).
try {
logger.start();
//Verarbeitung des Protokollausgabeziels hier
} finally {
logger.shutdown();
}
Vom Aufruf der Startmethode bis zum Aufruf der Shutdown-Methode wird das Protokoll automatisch im festgelegten Intervall ausgegeben.
Recommended Posts