logback не печатает perf4j в файл журнала

Мое приложение использует logback. Теперь я хочу использовать perf4j 0.9.16 для моего текущего приложения. Конфигурация взята с http://perf4j.codehaus.org/apidocs/org/perf4j/logback/package-summary.html

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>/var/log/myapp/myapp.log.%d{yyyy-MM-dd}</FileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern>
    </encoder>
</appender>

<appender name="perf4jFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>/var/log/myapp/myapp.timer.%d{yyyy-MM-dd}</FileNamePattern>
    </rollingPolicy>
    <encoder>
        <Pattern>%date %-5level [%thread] %logger{36} [%file:%line] %msg%n</Pattern>
    </encoder>
</appender>

<logger name="org.perf4j.TimingLogger" level="DEBUG" additivity="false">
    <appender-ref ref="perf4jFileAppender"/>
</logger>

<root level="INFO">
    <appender-ref ref="file"/>
</root>

myapp.log is still worked as before but myapp.timer is empty file. It logs to console like this:

start[1430914241369] time[4] tag[firstMethod.success] message[OK]
start[1430914241375] time[0] tag[secondMethod.success] message[OK]

Я пробовал эти настройки perf4j для logback.xml, но это не помогло. . Есть идеи?

Спасибо.

===========================================

Обновить.

С <configuration debug="true"> журналы приложений:

14:45:57,434 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/var/app/tomcat/webapps/myapp/WEB-INF/classes/logback.xml]
14:45:57,506 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:45:57,512 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Namingappender as [file]
14:45:57,533 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Pushing component [rollingPolicy] on top of the object stack.
14:45:57,561 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
14:45:57,563 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use thepattern /var/log/myapp/myapp.log.%d{yyyy-MM-dd} for the active file
14:45:57,569 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern '/var/log/myapp/myapp.log.%d{yyyy-MM-dd}'.
14:45:57,569 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
14:45:57,572 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Wed May 06     14:45:57 CEST 2015
14:45:57,573 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:45:57,574 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Pushing component [encoder] on top of the object stack.
14:45:57,597 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - Active log file name: /var/log/myapp/myapp.log.2015-05-06
14:45:57,597 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - File property is set to [null]
14:45:57,598 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:45:57,598 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Namingappender as [perf4jFileAppender]
14:45:57,598 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Pushing component [rollingPolicy] on top of the object stack.
14:45:57,599 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
14:45:57,599 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use thepattern /var/log/myapp/myapp.timer.%d{yyyy-MM-dd} for the active file
14:45:57,600 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern '/var/log/myapp/myapp.timer.%d{yyyy-MM-dd}'.
14:45:57,600 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
14:45:57,600 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Wed May 06     14:45:57 CEST 2015
14:45:57,600 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:45:57,600 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA- Pushing component [encoder] on top of the object stack.
14:45:57,601 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[perf4jFileAppender] - Active log file name: /var/log/myapp/myapp.timer.2015-05-06
14:45:57,601 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[perf4jFileAppender] - File property is set to [null]
14:45:57,601 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.perf4j.TimingLogger] to DEBUG
14:45:57,601 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.perf4j.TimingLogger] to false
14:45:57,601 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [perf4jFileAppender] to Logger[org.perf4j.TimingLogger]
14:45:57,604 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
14:45:57,604 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file] to Logger[ROOT]
14:45:57,604 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

person Duc Vu    schedule 06.05.2015    source источник
comment
В вашем примере мне не хватает имени регистратора. И я не понимаю, что вы подразумеваете под журналами для консоли; это две строки из stdout вашего приложения (консоли) или из myapp.log   -  person Aaron Digulla    schedule 06.05.2015
comment
Я имею в виду консоль приложения, а не myapp.log   -  person Duc Vu    schedule 06.05.2015
comment
Вы получаете вывод на консоль с конфигом выше? Это, конечно, невозможно. Либо у вас есть код, который не использует slf4j, либо указанная выше конфигурация не используется.   -  person Aaron Digulla    schedule 06.05.2015
comment
Штефан выясняет проблему. Спасибо за вашу поддержку!   -  person Duc Vu    schedule 06.05.2015


Ответы (2)


Это происходит, когда вы передаете свой собственный регистратор одному из конструкторов Slf4JStopWatch. Либо используйте конструктор по умолчанию (new Slf4JStopWatch()), либо измените файл конфигурации на что-то вроде

<logger name="com.example.MyOwnPerformanceLogger" level="DEBUG" additivity="false">
    <appender-ref ref="perf4jFileAppender"/>
</logger>

org.perf4j.TimingLogger — это просто имя регистратора по умолчанию для секундомеров.

Кстати: один из ваших элементов <pattern> написан с большой буквы.

person steffen    schedule 06.05.2015
comment
Вы также можете попробовать поместить все регистраторы производительности в определенный пакет, а затем настроить регистратор для этого пакета. Это ловило бы каждый конкретный регистратор. Но ключ в том, что имя вашего логгера в конфиге и имя, переданное конструктору Slf4JStopWatch, должны каким-то образом совпадать. - person Aaron Digulla; 06.05.2015

Код выглядит правильно. Обратите внимание, что logback загружает конфигурацию из нескольких мест, поэтому возможно, что ваша конфигурация не используется. Чтобы узнать, что происходит, замените <configuration> на <configuration debug="true">.

Затем Logback распечатает свою собственную настройку, пока анализирует конфигурацию. Если вы ничего не видите, то где-то в пути к классам есть дополнительный файл logback.xml или logback-test.xml или logback.groovy.

person Aaron Digulla    schedule 06.05.2015
comment
Спасибо за ваше предложение. Я использовал <configuration debug="true">, выглядит хорошо. Пожалуйста, проверьте мое обновление вопроса. - person Duc Vu; 06.05.2015