Почему не Slf4j/Logback log имя файла и номер строки

У меня проблемы с регистрацией, когда slf4j не регистрирует имя файла и номер строки в сообщении / трассировке стека.

Код:

private static Logger log = LoggerFactory.getLogger(SomeService.class);

@Override
public void aService(ServiceAdmin sa) throws Exception {
    log.debug(LoggerFactory.class.toString());
    log.debug(log.getClass().getName());
    log.debug("Setup Example");
    SomeService.setDefault(Example.getInstance());
    log.debug("Example finished");
}

Журнал:

2015-04-20 14:47:26.573 DEBUG [main] null:-1 - class org.slf4j.LoggerFactory
2015-04-20 14:47:26.574 DEBUG [main] null:-1 - ch.qos.logback.classic.Logger
2015-04-20 14:47:26.574 DEBUG [main] null:-1 - Setup Example
2015-04-20 14:47:26.575 DEBUG [main] null:-1 - SomeService finished

Это pars моего logback.xml, который относится к этому классу

    <logger name="com.bredband.nexusgw.services">
            <level value="debug" />
            <appender-ref ref="nexusservice" />
    </logger>

    <appender name="nexusservice"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>/var/log/nexus/nexusjgw/jgw/Service.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <FileNamePattern>/var/log/nexus/nexusjgw/jgw/Service.log.%i
                    </FileNamePattern>
                    <MinIndex>1</MinIndex>
                    <MaxIndex>5</MaxIndex>
            </rollingPolicy>
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <MaxFileSize>200MB</MaxFileSize>
            </triggeringPolicy>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>debug</level>
            </filter>
            <layout class="ch.qos.logback.classic.PatternLayout">
                    <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %F:%L - %m%n</Pattern>
            </layout>
    </appender>

Кто-нибудь видел это раньше и может указать мне правильное направление?

Б.Р. Стефан

-- Обновить --

Я изменил%F на%C, но это ничего не изменило в журналах. Затем я попытался установить debug = "on" в заголовке javac в моем файле ant, и теперь он записывает имя класса и номер строки.

2015-04-21 08:28:55.910 DEBUG [main] Service.java:20 - class     org.slf4j.LoggerFactory
2015-04-21 08:28:55.911 DEBUG [main] Service.java:21 - ch.qos.logback.classic.Logger
2015-04-21 08:28:55.911 DEBUG [main] Service.java:22 - Setup Example
2015-04-21 08:28:55.912 DEBUG [main] Service.java:24 - Example finished

Хотя это работает, это не то, что я изменил раньше. Единственное, что изменилось в этом проекте с течением времени, это добавление других внешних банок. Я не совсем уверен, как добавление дублированной / более новой / более старой версии slf4j в другой внешний jar повлияет на ведение журнала, хотя, любая версия должна искать файл logback?

- Обновление - После проверки большого количества исторических проверок файла build.xml я обнаружил, что у нас на самом деле было debug = "on" ранее, и проблема, возможно, фактически была вызвана тем, что для этого параметра установлено значение "off".

Спасибо за помощь.

Б.Р. Стефан

1 ответ

Решение

Сначала вы должны убедиться, что вы компилируете свое приложение с отладочной информацией. Если звонит javac напрямую, то это -g параметр командной строки. Однако большинство инструментов сборки (таких как maven или ant) ​​имеют особый способ предоставления этого параметра.

Вы также можете заменить %F с %C, который должен работать без отладочной информации.

Другие вопросы по тегам