Как использовать Logback напрямую без прохождения SLF4J - PullRequest
9 голосов
/ 29 марта 2012

Я пытаюсь настроить некоторые функции входа в систему (пользовательские приложения и тому подобное).Чтобы протестировать его, я хотел бы настроить Logback и напрямую вызывать его методы ведения журнала, не проходя через sl4j.

Причина этого странного требования заключается в том, чтобы иметь возможность тестировать функциональность logback в среде, где также другие мосты SLF4Jдоступны.

Так что я хочу сделать вещи, описанные здесь: http://logback.qos.ch/manual/configuration.html#joranDirectly без ссылки на SLF4J

Ответы [ 3 ]

3 голосов
/ 25 января 2016

Есть способ выяснить.

Вот пример того, как вы можете настроить LOGBack

// Here we create context
LoggerContext loggerContext = new LoggerContext();
// Initializer is used to enrich context with details
ContextInitializer contextInitializer = new ContextInitializer(loggerContext);
try {
    // Get a configuration file from classpath
    URL configurationUrl = Thread.currentThread().getContextClassLoader().getResource("custom-logback-configuration.xml");
    if (configurationUrl == null) {
        throw new IllegalStateException("Unable to find custom logback configuration file");
    }
    // Ask context initializer to load configuration into context
    contextInitializer.configureByResource(configurationUrl);
    // Here we get logger from context
    logger = loggerContext.getLogger(LogReporter.class);
} catch (JoranException e) {
    throw new RuntimeException("Unable to configure logger", e);
}

В общем, если вы хотите знать, как работает любой бэкэнд SLF4J, вы можете простопосмотреть на источник класса org.slf4j.impl.StaticLoggerBinder из этого бэкэнда.

3 голосов
/ 29 марта 2012

Не пробовал, но выглядит правильно, возможно, это поможет:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ch.qos.logback.classic.Logger log = lc.getLogger(foo.Bar.class);

ch.qos.logback.classic.Logger реализует org.slf4j.Logger, но вы можете использовать его напрямую.Возможно, вам придется получить LoggerContext по-другому.

2 голосов
/ 21 декабря 2013

К сожалению, я не думаю, что это возможно.Если вы посмотрите на источник Logback Logger (или другие классы), вы увидите, что это зависит от slf4j.

Это не очень хорошо, imho, поскольку logback не должен знать о slf4j.

...