Hibernate4 verwendet jboss-logging statt slf4j. Durch die log4j Bridge leiten wir die Logs zu logback.

Bei der Migration auf Hibernate 4 haben wir festgestellt, dass Hibernate statt wie bisher slf4j nun ihre eigene Logging API jboss-logging verwendet. Glücklicherweise logt diese API standardmäßig auf log4j. Durch Einsatz der log4j-over-slf4j Bridge lenken wir die Logs wieder auf slf4j, um sie dann per logback zu loggen.

Es ist wichtig bei der Nutzung dieser Bridge keine log4j.jars im Klassenpfad zu haben! Es dürfen kein direkten oder transitiven log4j.jar Abhängigkeiten mehr existieren. Mit maven kann das leicht über ein mvn dependency:tree geprüft werden. Das exclude erfolgt dann beispielhaft so:

    <dependency>
      <groupId>sample.groupId</groupId>
      <artifactId>sample.artifactId</artifactId>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>

7 Gedanken zu “Hibernate4 verwendet jboss-logging statt slf4j. Durch die log4j Bridge leiten wir die Logs zu logback.

  1. Pingback: Hibernate 4 Migration | HYPOPORT IT Blog

  2. Hallo,

    Kennen Sie irgendein Tutorial für jboss-logging? Ich möchte nämlich einen weiteren Appender für Hinzufügen, aber ich krieg das irgendwie nicht hin und Google war diesbezüglich leider auch nicht wirklich hilfreich…

    Danke im Voraus,

    Christoph Spielmann

      • Hallo Leif,

        Danke für die rasche Antwort. Ich habe folgendes Problem:

        Ich verwende für ein Projekt Hibernate V4.1.2 für die Persistenz. Standardmässig loggt Hibernate ja alles auf die Konsole. Für mich als Entwickler reicht das natürlich aus, aber wenn ich dann die Applikation ausliefere, möchte ich, dass die Logausgaben zusätzlich noch in ein Logfile geschrieben werden. Soweit zu den Rahmenbedinungen. Wenn man in der Hibernate-Doku bez. Logging nachschaut, dann ist da immer noch die alte, pre-4.x-Version beschrieben (also slf4j+log4j) und leider gilt das halt auch für 95% der Sachen die man mittels Google findet. Langer Rede, kurzer Sinn: Meine Frage ist nun, wie kann ich das Logging von Hibernate konfigurieren? Mach ich das über eine log4j.properties (hätte ich eigentlich schon ausprobiert und so scheints nicht zu funktionieren, aber vielleicht liegts ja auch nur am falschen Platz und wird deswegen nicht gefunden…), XML-basierte Konfiguration von log4j, über die hibernate.cfg.xml? Brauch ich die log4j.jar im Classpath? Darf ich die log4j.jar überhaupt im Classpath parken? Kurz gesagt: Ich habe keinen Schimmer wie ich das Logging von Hibernate richtig aufsetze (ohne Doku auch kein Wunder… ;) ) und den Link den Du mir zukommen hast lassen, bezieht sich halt leider nur auf jboss selber und den setze ich halt in meinem Projekt nicht ein.

        Danke auf alle Fälle für Dein Engagement!

        LG,

        Christoph

      • Hallo Leif,

        So jetzt hab ich einmal eine Erklärung dafür, warum meine (inzwischen) verzweifelten Versuche bez. log4j nichts gefruchtet haben: Es wird anscheinend standardmässig der JDK-Logger (org.jboss.logging.JDKLogger) von Hibernate verwendet und nicht log4j. Das hab ich herausgefunden indem ich mir einfach mal ein org.jboss.logging.Logger-Objekt geholt habe und es mir im Debugger angeschaut habe. Das macht mich dann doch wieder neugierig, wie man das Logging in Hibernate4 generell konfiguriert, weil Du ja eigentlich der Meinung warst, dass log4j fürs Debugging verwendet wird…

        LG,

        Christoph

      • Okey Kommando zurück, ich habs jetzt selber hinbekommen! Nur zur Info, falls jemand anders danach sucht:

        1. jboss-logging verwendet standardmässig den im JDK-inkludierten Logger
        2. wenn man einen anderen Logger verwenden will/muss, MÜSSEN die entsprechenden jars im Classpath sein
        Ab hier speziell für log4j
        3. es muss die Konfiguration für log4j im Classpath zur Laufzeit gefunden werden (ich habs mit einer log4j.properties gemacht, die ich einfach ins gleiche Verzeichnis wie die hibernate.cfg.xml gelegt habe)

        Danke nochmals für Deine Hilfe!

        LG,

        Christoph

  3. Super Christoph, das du dein Problem gelöst hast. In unserem Fall lag dann vermutlich noch Log4j mit im Classpath, da wir dies vor SLF4J und Logback benutzt hatten.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ photo

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s