Wie finde ich heraus, an welche Bibliothek sich slf4j gebunden hat?

Lesezeit: 2 Minuten

Benutzeravatar von psykeron
Psykeron

Ich verwende slf4j, um mich in meiner Anwendung anzumelden. Ich verstehe den Zweck von slf4j. Ich würde gerne wissen, wie ich herausfinden kann, an welche Protokollierungsbibliothek slf4j derzeit gebunden ist. Ich habe log4j in meinen referenzierten Bibliotheken. Ich gehe davon aus, dass slf4j sich an log4j gebunden hat.

Was ich gerne wissen würde, ist, gibt es eine Möglichkeit, diese Bindung ausdrücklich zu bestätigen?

  • Ich schwöre, es gab eine Möglichkeit, das slf4j-Debugging (Meta-Debugging) zu aktivieren, aber ich kann mich nicht erinnern, was es war. Keine der Antworten geht darauf ein.

    – Sridhar Sarnobat

    15. Januar 2019 um 23:25 Uhr

Tun Sie einfach, was SLF4J tut, um die Bindung zu entdecken:

final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();

Jetzt können Sie versuchen herauszufinden, was in meinem Fall das tatsächliche Implementierungs-Logback ist:

System.out.println(binder.getLoggerFactory());
System.out.println(binder.getLoggerFactoryClassStr());

Das druckt:

ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector

  • Wie finde ich heraus, aus welcher JAR-Datei der Logger (Logback im obigen Beispiel) stammt?

    – Jason

    18. Mai 2015 um 4:02 Uhr

  • @Jason, wie wäre es, wenn Sie den Klassenlader fragen?

    – Kedar Mhaswade

    5. April 2017 um 17:12 Uhr

  • Wie frage ich den Klassenlader?

    – Jason

    14. Juni 2017 um 14:23 Uhr

  • StaticLoggerBinder ist nicht Teil von slf4j-apialso funktioniert diese Methode nicht.

    – Radler

    3. Januar 2018 um 20:02 Uhr

Das StaticLoggerBinder‘s getLoggerFactoryClassStr() Methode ist wahrscheinlich das, wonach Sie suchen.

Einfach. Setzen Sie einen Breakpoint auf .. sagen wir .. LOG.info(…). Sobald der Debugger dort stoppt, treten Sie ein in … und Viola … Sie befinden sich im Code des eigentlichen Loggers … sagen Sie log4j oder logback … was auch immer.

Es ist möglich, dies mit der öffentlichen Haupt-API von slf4j (dh ohne den internen StaticLoggerBinder) zu tun, z. B. um festzustellen, ob slf4j bpound zu log4j2 hat:

if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
    org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
) 
{ ... }

Oder vermeiden Sie die Notwendigkeit, StaticLoggerBinder zu haben (das nicht Teil von slf4j-api ist):

log.info(log.getClass().getName());

In meinem Fall wird dies gedruckt

ch.qos.logback.classic.Logger

1435810cookie-checkWie finde ich heraus, an welche Bibliothek sich slf4j gebunden hat?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy