Программно включить Logback в режиме отладки? - PullRequest
1 голос
/ 13 декабря 2011

Мне было интересно, есть ли способ включить режим отладки программно. Поскольку мне не разрешено использовать файл конфигурации, я сейчас все настраиваю программно. Недавно я столкнулся с проблемой, когда RollingFileAppender прекращает запись в файл, хотя FileAppender работает отлично. Фактически, RollingFileAppender также работал на прошлой неделе, и с тех пор ничего, что я знаю, не изменилось.

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

1 Ответ

2 голосов
/ 20 декабря 2011

Тони дал отличный ответ после того, как я опубликовал вопрос.

http://old.nabble.com/Enable-Debugging-Mode-Programmatically--td32961424.html

Это очень полезно, когда вы пытаетесь понять, почему LogBack не работает в определенных случаях. Я решил использовать первый способ для своего кода инициализации.

Имейте в виду, что именно тогда вы решите не использовать файл конфигурации, как в моем случае использования.


От: tony19

Есть несколько способов:

1) Использовать StatusPrinter.printInCaseOfErrorsOrWarnings (loggerContext)

OR

2) Загрузить жестко запрограммированную строку XML-файла конфигурации с параметром true.debug:

static final String LOGBACK_XML = 
    "<configuration debug='true'>" + 
    "  <appender name='FILE' class='ch.qos.logback.core.RollingFileAppender'>" +
    "    <file>foo.log</file>" +
    "    <append>true</append>" +
    "    <encoder>" +
    "      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>" +
    "    </encoder>" +
    "  </appender>" +
    "  <root level='INFO'>" +
    "    <appender-ref ref='FILE' />" +
    "  </root>" +
    "</configuration>"
    ;

static public void configLogback() {
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
            try {
           JoranConfigurator configurator = new JoranConfigurator();
           configurator.setContext(lc);
           lc.reset();

           configurator.doConfigure(new ByteArrayInputStream(LOGBACK_XML.getBytes()));
       } catch (JoranException je) {
           je.printStackTrace();
       }

       // you can also print the errors/warning explicitly (instead of debug='true' in xml)
       //StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
}
...