Logback Logger не имеет добавлений - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть веб-приложение Vaadin, использующее slf4 и logback.В котором я использую консоль и DBAppender.Все работает нормально, если я использую запись в Testcase:

    @Test
    public void test() {
        Logger logger=  LoggerFactory.getLogger("TEST");
        logger.info("Teste");
}

Но если я использую Logger в Applikation, ничего не происходит.Отсутствует отладочный вывод из Logback, а также не выводятся из моих вызовов регистратора.

Gradle:

compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'

logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug ="true">
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource
                class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>org.postgresql.Driver</driverClass>
            <url>jdbc:postgresql://localhost:5432/test</url>
            <user>postgres</user>
            <password></password> <!-- no password -->
        </connectionSource>
    </appender>

    <!-- the level of the root level is set to DEBUG by default. -->
    <root level="INFO">
        <appender-ref ref="stdout" />
        <appender-ref ref="db" />
    </root>
</configuration>

РЕДАКТИРОВАТЬ: Когда я удаляю logback-зависимости и добавляю

compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

все работает, но, к сожалению, это не вариант, потому что мне нужен dpAppender

EDIT2 Отладкой яобнаружил, что никакие дополнители не добавляются в регистратор вообще.В следующем коде из ch.qos.logback.classic:

public void callAppenders(ILoggingEvent event) {
    int writes = 0;
    for (Logger l = this; l != null; l = l.parent) {
        writes += l.appendLoopOnAppenders(event);
        if (!l.additive) {
            break;
        }
    }
    // No appenders in hierarchy
    if (writes == 0) {
        loggerContext.noAppenderDefinedWarning(this);
    }
}

private int appendLoopOnAppenders(ILoggingEvent event) {
    if (aai != null) {
        return aai.appendLoopOnAppenders(event);
    } else {
        return 0;
    }
}

размер aai равен 0

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Отсутствие Appenders было вызвано плагином gradle vaadin, который я использовал для запуска приложения.Это было решено, когда я заменил плагин vaadin на gretty.

0 голосов
/ 23 апреля 2019

Ваш экземпляр регистратора

Logger logger=  LoggerFactory.getLogger("TEST");

не ссылается ни на один из существующих регистраторов с именем "TEST".

Я думаю, что вы должны определить регистратор в logback.xml следующим образом:

<logger name="webAppLogger" level="info">
    <appender-ref ref="stdout" />
    <appender-ref ref="db" />
</logger>

, а затем ссылаться на него, когда вы хотите использовать регистратор в своем приложении, например:

Logger logger=  LoggerFactory.getLogger("webAppLogger");

Теперь Logback должен использовать webAppLogger, который вы определили в logback.xml.Там вы также определили, что webAppLogger использует два определенных приложения: «stdout» и «db»

...