ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
2241
2241
EMPFEHLEN
-
31.08.10 20:48 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
hier mal ein Beispiel für Logging durch SLF4J (http://www.slf4j.org/)
und Logback (http://logback.qos.ch/). Für das Beispiel verwende ich Maven für den Build.
Pom.xml:
Code xml: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
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>de.tutorials</groupId> <artifactId>java.logback.training</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.11</version> <scope>runtime</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>0.9.18</version> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>testing</scope> </dependency> </dependencies> </project>
Unser Logging Beispiel:
Code 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
package de.tutorials.logging; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogBackExample { static Logger l = LoggerFactory.getLogger(LogBackExample.class); public static void main(String[] args) { for (int i = 0; i < 1000; i++) { l.debug("Hello {}", "Debug"); l.info("Hello {}", "Info"); l.warn("Hello {}", "Warn"); l.trace("Hello {}", "Trace"); l.error("Hello {}", "Error"); try { TimeUnit.SECONDS.sleep(1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
Unter src/main/resources legen wir nun eine logback.xml Datei an:
Code xml:1 2 3 4 5 6 7 8 9 10 11
<configuration scan="true" scanPeriod="15 seconds"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{HH:mm:ss.SSS} [%thread] %.-1level %logger{36} - %msg%n</Pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
Mit dem Pattern-Element definieren wir die Ausgabemuster für die Log-Nachricht.
Weitere Informationen zu Möglichen Patterns findet man hier:
http://logback.qos.ch/manual/layouts.html#PatternLayout
Die Unterschiedlichen Loglevel (Info, Warning, Error, Debug, Trace) wird über das Pattern
%.-1level zu (I,W,E,D,T) reduziert (habe ich so beim Android Logging das erste mal gesehen).
Die Konfigurationsmöglichkeiten von LogBack sind um einiges Flexibler und Umfangreicher
als mit Log4J (Logback ist ja auch der Nachfolger von Log4j)
Ausgabe:
Code :1 2 3
20:37:29.387 [main] I de.tutorials.logging.LogBackExample - Hello Info 20:37:29.391 [main] W de.tutorials.logging.LogBackExample - Hello Warn 20:37:29.391 [main] E de.tutorials.logging.LogBackExample - Hello Error
Will man für die Tests ein anderes (feineres) Logging haben so kann man dies mit Logback
bequem über eine weitere logging Konfigurationsdatei (logback-test.xml) die nur in Tests geladenen
wird realisieren.
Unser Beispieltest:
Code java:1 2 3 4 5 6 7 8 9 10
package de.tutorials.logging; import org.junit.Test; public class LockBagExampleTest { @Test public void logging() { LogBackExample.main(null); } }
logback-test.xml
Code xml:1 2 3 4 5 6 7 8 9 10 11
<configuration scan="true" scanPeriod="15 seconds"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{HH:mm:ss.SSS} [%thread] %.-1level %logger{36} - %msg%n</Pattern> </layout> </appender> <root level="TRACE"> <appender-ref ref="CONSOLE" /> </root> </configuration>
Diesmal habe ich das logger Level von INFO auf TRACE gesetzt.
Ausgabe:
Code :1 2 3 4 5
20:30:10.703 [main] D de.tutorials.logging.LogBackExample - Hello Debug 20:30:10.707 [main] I de.tutorials.logging.LogBackExample - Hello Info 20:30:10.707 [main] W de.tutorials.logging.LogBackExample - Hello Warn 20:30:10.708 [main] T de.tutorials.logging.LogBackExample - Hello Trace 20:30:10.708 [main] E de.tutorials.logging.LogBackExample - Hello Error
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
17.01.11 22:33 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
FYI:
Die "aktuellen" LogBack und SLF4J API Maven Dependencies:
Code xml:1 2 3 4 5 6 7 8 9 10 11 12 13
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>0.9.27</version> <scope>runtime</scope> </dependency>
Außerdem haben sich die Best Practices für die LogBack Konfiguration leicht geändert:
http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
Beispiel:
Code xml:1 2 3 4 5 6 7 8 9 10 11 12
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="15 seconds"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{HH:mm:ss.SSS} [%thread] %.-1level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
18.01.11 12:39 #3
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 900
Es sei noch dazu gesagt, dass man Logback sozusagen als inoffizieler Nachfolger von log4j nennen kann. Denn es wurde beides vom selben Entwickler gegründet (Ceki Gülcü).
Log4j zählt oftmals immer noch Standard-Tool zum loggen, obwohl es bereits seit Jahren nicht mehr weiter entwickelt wird. Ich bin auch erst durch Zufall auf logback gestoßen, als ich mich gefragt habe, ob log4j noch weiter entwickelt wird.Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
Ähnliche Themen
-
Beispiel für einfache Logging Configuration mit AspectJ
Von Thomas Darimont im Forum JavaAntworten: 9Letzter Beitrag: 03.02.10, 16:26 -
flexibles Layout
Von Precog im Forum CSSAntworten: 4Letzter Beitrag: 11.10.09, 20:01 -
Flexibles BMP/JPEG
Von MyersGer im Forum .NET ArchivAntworten: 9Letzter Beitrag: 04.03.04, 20:34 -
Flexibles Popup
Von Moritz123 im Forum Javascript & AjaxAntworten: 20Letzter Beitrag: 10.04.03, 19:03 -
flexibles menu mit js für ie
Von xclaudiox im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 23.05.01, 01:44






Zitieren
Login




