Logback AyncAppender не распечатывает файл и номер строки
У меня есть следующий файл конфигурации, который очень похож на стандартный пример в руководстве Logback. Единственная разница заключается в добавлении [% F:% L]. пока все работает,% F и% L не работают. Если я удалю асинхронный appender и журнал напрямую, используя файл appender, все будет отлично.
Может кто-нибудь объяснить, что происходит? И как печатать имя файла и номер строки, поскольку эти два параметра должны?
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
<encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<root level="DEBUG"><appender-ref ref="ASYNC" /></root>
</configuration>
Ответы
Ответ 1
Вам необходимо установить для свойства AsyncAppender includeCallerData значение true. Вот модифицированный файл конфигурации:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
<encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
<!-- add the following line -->
<includeCallerData>true</includeCallerData>
</appender>
<root level="DEBUG"><appender-ref ref="ASYNC" /></root>
</configuration>
Ответ 2
Я отправляю такой же ответ в формате groovy для тех, кто хочет стиль groovy как я.
appender('FILE', ch.qos.logback.core.FileAppender) {
file = 'myapp.log'
encoder(PatternLayoutEncoder) {
pattern = '%logger{35} - [%F:%L] - %msg%n'
}
}
appender('ASYNC', ch.qos.logback.classic.AsyncAppender) {
appenderRef('FILE')
//add the following line
includeCallerData = true
}
root(DEBUG, ['ASYNC'])