Bessere Protokollierung für Ihre Enterprise-Java-Anwendung – CrunchifyBetterLog4jLogging.java
Veröffentlicht: 2019-08-29
Wenn Sie eine Java-Anwendung entwickeln, in der Sie die Logger-Funktionalität verwenden müssen, gibt es eine Reihe von Möglichkeiten, wie Sie das Logger-Dienstprogramm verbessern können.
Um sicherzustellen, dass die Protokollierung in einem Produktionsprogramm belassen werden kann, wurde die Java-Logger-API entwickelt, um die Protokollierung so kostengünstig wie möglich zu gestalten. Damit der Code bei Bedarf eine differenzierte Protokollierung erzeugt, die Anwendung jedoch im normalen Produktionsbetrieb nicht verlangsamt, bietet die API Mechanismen zum dynamischen Ändern der erzeugten Protokollmeldungen, sodass die Auswirkungen des Protokollierungscodes während des normalen Betriebs minimiert werden.
Beginnen wir nun mit dem Schreiben eines einfachen Logger-Dienstprogramms, das die Qualität Ihrer gesamten Produktionsprotokollierung verbessern wird.
Aktualisieren Sie Log4j auf die neueste Version
CVE-2021-44228: Apache Log4j2 <=2.14.1 JNDI-Funktionen, die in Konfiguration, Protokollmeldungen und Parametern verwendet werden, schützen nicht vor von Angreifern kontrolliertem LDAP und anderen JNDI-bezogenen Endpunkten.
Ab log4j 2.16.0 ist dieses Verhalten standardmäßig deaktiviert.
Schritt 1:
Erstellen Sie die Datei CrunchifyBetterLog4jLogging.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package com . crunchify . tutorial ; import org . apache . log4j . Logger ; /** * @author Crunchify.com * */ public class CrunchifyBetterLog4jLogging { private static final String Crunchify_FLAG_DEBUG = " ---------- " ; private static final String Crunchify_FLAG_WARN = " ^^^^^^^^^^ " ; private static final String Crunchify_FLAG_INFO = " ********** " ; private static final String Crunchify_FLAG_ERROR = " ########## " ; private static final String Crunchify_FLAG_FATAL = " $$$$$ " ; // Debug Level public static void debug ( Logger logger , String message ) { logger . debug ( Crunchify_FLAG_DEBUG + message + Crunchify_FLAG_DEBUG ) ; } // Warning Level public static void warn ( Logger logger , String message ) { logger . warn ( Crunchify_FLAG_WARN + message + Crunchify_FLAG_WARN ) ; } // Info Level public static void info ( Logger logger , String message ) { logger . info ( Crunchify_FLAG_INFO + message + Crunchify_FLAG_INFO ) ; } // Error Level public static void error ( Logger Logger , String message ) { Logger . error ( Crunchify_FLAG_ERROR + message + Crunchify_FLAG_ERROR ) ; } // Fatal Level public static void fatal ( Logger Logger , String message ) { Logger . fatal ( Crunchify_FLAG_FATAL + message + Crunchify_FLAG_FATAL ) ; } } |
Was wir im Grunde tun, ist, wenn Sie in Ihrem Java-Programm log.info
oder log.error
oder log.fatal
sagen, fügt der Code automatisch Sonderzeichen hinzu, wie Sie oben sehen.
Schritt 2
Testfall (Java-Beispielprogramm) – CrunchifyBetterLog4jLoggingTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package com . crunchify . tutorial ; import org . apache . log4j . Logger ; public class CrunchifyBetterLog4jLoggingTest { private static Logger logger = Logger . getLogger ( CrunchifyBetterLog4jLoggingTest . class ) ; public static void main ( String [ ] args ) { int a = 20 ; int b = 30 ; int c = 3 ; int d = 4 ; CrunchifyBetterLog4jLoggingTest . SwapVairablesMethod1 ( a , b ) ; CrunchifyBetterLog4jLoggingTest . SwapVairablesMethod2 ( c , d ) ; } public static void SwapVairablesMethod1 ( int a , int b ) { CrunchifyBetterLog4jLogging . debug ( logger , "value of a and b before swapping, a: " + a + " b: " + b ) ; // swapping value of two numbers without using temp variable a = a + b ; // now a is 50 and b is 20 b = a - b ; // now a is 50 but b is 20 (original value of a) a = a - b ; // now a is 30 and b is 20, numbers are swapped CrunchifyBetterLog4jLogging . warn ( logger , "Result Method1 => a: " + a + " b: " + b ) ; } public static void SwapVairablesMethod2 ( int c , int d ) { CrunchifyBetterLog4jLogging . info ( logger , "value of c and d before swapping, c: " + c + " d: " + d ) ; // swapping value of two numbers without using temp variable using // multiplication and division c = c * d ; d = c / d ; c = c / d ; CrunchifyBetterLog4jLogging . error ( logger , "Result Method2 => c: " + c + " d: " + d ) ; } } |
Hier drucken wir verschiedene Arten von Logging-Ergebnissen.

Ergebnis:
1 2 3 4 |
2014 - 06 - 21 00 : 23 : 19 , 463 DEBUG [ CrunchifyBetterLog4jLoggingTest ] @ @ @ @ @ @ @ @ @ @ value of a and b before swapping , a : 20 b : 30 @ @ @ @ @ @ @ @ @ @ 2014 - 06 - 21 00 : 23 : 19 , 464 WARN [ CrunchifyBetterLog4jLoggingTest ] ^^^^^^^^^^ Result Method1 = > a : 30 b : 20 ^^^^^^^^^^ 2014 - 06 - 21 00 : 23 : 19 , 464 INFO [ CrunchifyBetterLog4jLoggingTest ] ********** value of c and d before swapping , c : 3 d : 4 ********** 2014 - 06 - 21 00 : 23 : 19 , 464 ERROR [ CrunchifyBetterLog4jLoggingTest ] ########## Result Method2 => c: 4 d: 3 ########## |