In diesem Tutorial zeigen wir Ihnen, wie Sie mit dem klassischen log4j 1.2.x eine Debug- oder Fehlernachricht in einer Java-Anwendung protokollieren.
1. Projektverzeichnis
Überprüfen Sie die endgültige Projektstruktur, ein Java-Standardprojekt im Maven-Stil.
2. Holen Sie sich Log4j
Erklärt die folgenden Abhängigkeiten:
pom.xml
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
Für Nicht-Maven-Benutzer besuchen Sie die Seite log4j , laden Sie das Jar herunter und legen Sie es manuell in den Pfad der Projektbibliothek.
3. log4j.properties
Erstellen Sie eine `log4j.properties'-Datei und legen Sie sie im Ressourcenordner ab.
Siehe oben, Schritt 1.
im Verzeichnis
project/classes
. Stellen Sie für Java-Webanwendungen sicher, dass die Datei
log4j.properties
vorhanden ist
im Verzeichnis
WEB-INF/classes
log4j.properties
# Root logger option log4j.rootLogger=DEBUG, stdout, file # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Redirect log messages to a log file, support file rolling. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=C:\\log4j-application.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
-
Hinweis ** Informationen zu den Symbolen im
ConversionPattern
finden Sie in diesem http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html.html .
Lass es zusammenbrechen:
-
% d \ {jjjj-MM-tt HH: mm: ss} = Datums- und Uhrzeitformat, siehe
SimpleDateFormat JavaDoc.
-
% -5p = Die Protokollierungspriorität wie DEBUG oder ERROR. Die -5 ist optional,
für das hübsche Druckformat.
-
% c \ {1} = Der Protokollierungsname, den wir über getLogger () festgelegt haben
-
% L = Die Zeilennummer, von der die Protokollierungsanforderung stammt.
-
% m% n = Die zu protokollierende Nachricht und der Zeilenumbruch.
Beispiele für Protokollnachrichten:
2014-07-02 20:52:39 DEBUG className:200 - This is debug message 2014-07-02 20:52:39 DEBUG className:201 - This is debug message2
4. Demo - Wie protokolliere ich eine Nachricht?
Um eine Nachricht zu protokollieren, erstellen Sie zuerst einen "final static" -Logger und definieren einen Namen für den Logger. Normalerweise verwenden wir den vollständigen Paketklassennamen.
final static Logger logger = Logger.getLogger(classname.class);
Protokolliert dann Nachrichten mit unterschiedlichen Prioritäten, z. B. debug, info, warn, error und fatal. Normalerweise müssen Sie nur Debug oder Fehler verwenden.
//logs a debug message if(logger.isDebugEnabled()){ logger.debug("This is debug"); } //logs an error message with parameter logger.error("This is error : " + parameter); //logs an exception thrown from somewhere logger.error("This is error", exception);
4.1 Beispiel: Logger ist auf debug Priorität gesetzt.
log4j.properties
log4j.rootLogger=DEBUG, stdout #...
HelloExample.java
package com.mkyong; import org.apache.log4j.Logger; public class HelloExample{ final static Logger logger = Logger.getLogger(HelloExample.class); public static void main(String[]args) { HelloExample obj = new HelloExample(); obj.runMe("mkyong"); } private void runMe(String parameter){ if(logger.isDebugEnabled()){ logger.debug("This is debug : " + parameter); } if(logger.isInfoEnabled()){ logger.info("This is info : " + parameter); } logger.warn("This is warn : " + parameter); logger.error("This is error : " + parameter); logger.fatal("This is fatal : " + parameter); } }
Ausgabe
2014-07-02 20:52:39 DEBUG HelloExample:19 - This is debug : mkyong 2014-07-02 20:52:39 INFO HelloExample:23 - This is info : mkyong 2014-07-02 20:52:39 WARN HelloExample:26 - This is warn : mkyong 2014-07-02 20:52:39 ERROR HelloExample:27 - This is error : mkyong 2014-07-02 20:52:39 FATAL HelloExample:28 - This is fatal : mkyong
4.2 Beispiel – Der Logger ist auf Fehler Priorität gesetzt.
log4j.properties
log4j.rootLogger=error, stdout #...
Starten Sie das
HelloExample
erneut, Sie erhalten die folgende Ausgabe
2014-07-02 20:56:02 ERROR HelloExample:27 - This is error : mkyong 2014-07-02 20:56:02 FATAL HelloExample:28 - This is fatal : mkyong
Überprüfen Sie die Klasse "Priority" von log4j.
Priorität.java
package org.apache.log4j; public class Priority { public final static int OFF__INT = Integer.MAX__VALUE; public final static int FATAL__INT = 50000; public final static int ERROR__INT = 40000; public final static int WARN__INT = 30000; public final static int INFO__INT = 20000; public final static int DEBUG__INT = 10000; //public final static int FINE__INT = DEBUG__INT; public final static int ALL__INT = Integer.MIN__VALUE;
Wenn Priorität in
log4j.properties
definiert ist, wird nur die gleiche oder über der Prioritätsnachricht protokolliert.
5. Demo - So protokollieren Sie eine Ausnahme
Ein Beispiel, das zeigt, wie Sie mit log4j eine Ausnahme protokollieren.
HelloExample2.java
package com.mkyong; import org.apache.log4j.Logger; public class HelloExample2{ final static Logger logger = Logger.getLogger(HelloExample2.class); public static void main(String[]args) { HelloExample2 obj = new HelloExample2(); try{ obj.divide(); }catch(ArithmeticException ex){ logger.error("Sorry, something wrong!", ex); } } private void divide(){ int i = 10/0; } }
Ausgabe
2014-07-02 21:03:10 ERROR HelloExample2:16 - Sorry, something wrong! java.lang.ArithmeticException:/by zero at com.mkyong.HelloExample2.divide(HelloExample2.java:24) at com.mkyong.HelloExample2.main(HelloExample2.java:14)
Erledigt.
Quellcode herunterladen
Quellcode herunterladen - log4j-hello-world-example.zip (8 KB)
Referenzen
Musterlayout]. Wikipedia: log4j
-
link://spring-mvc/spring-mvc-log4j-integration-beispiel/[Spring MVC
log4j Beispiel]. link://logging/log4j-log4j-properties-beispiele/[log4j.properties
Beispiele]
Link://Tag/Hallo-Welt/[Hallo Welt]Link://Tag/Log4j/[Log4j]