tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
2241
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #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ß Tom
    Angehängte Dateien Angehängte Dateien
     
    Java 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

  2. #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ß Tom
     
    Java 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

  3. #3
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    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:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    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

  1. Antworten: 9
    Letzter Beitrag: 03.02.10, 16:26
  2. flexibles Layout
    Von Precog im Forum CSS
    Antworten: 4
    Letzter Beitrag: 11.10.09, 20:01
  3. Flexibles BMP/JPEG
    Von MyersGer im Forum .NET Archiv
    Antworten: 9
    Letzter Beitrag: 04.03.04, 20:34
  4. Flexibles Popup
    Von Moritz123 im Forum Javascript & Ajax
    Antworten: 20
    Letzter Beitrag: 10.04.03, 19:03
  5. flexibles menu mit js für ie
    Von xclaudiox im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 23.05.01, 01:44