#logging #logback #slf4j #dropwizard
#ведение журнала #обратный вход #slf4j #dropwizard
Вопрос:
Итак, в основном, что я хочу сделать, это записывать журналы с разными уровнями журналов, такими как INFO DEBUG WARN и т.д., В разные файлы журнала.
Я нашел что-то похожее для slf4j здесь, но dropwizard использует logback в качестве основы ведения журнала.
Кто-нибудь может сказать мне, как это сделать в dropwizard с обратным журналом? Какие изменения я должен внести в свой файл conifg.yml?
level: INFO
loggers:
"io.dropwizard": INFO
"org.hibernate.SQL":
level: DEBUG
additive: false
appenders:
- type: file
currentLogFilename: /var/log/myapplication-sql.log
archivedLogFilenamePattern: /var/log/myapplication-sql-%d.log.gz
archivedFileCount: 5
Ответ №1:
Вот что вам нужно сделать:
- Внедрите или найдите какой-либо существующий код для пользовательского фильтра обратного входа.
Вот пример фильтра, который пропускает только сообщенияERROR
уровня:
package foo;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.logging.filter.FilterFactory;
@JsonTypeName("errors-only")
public class ErrorsOnlyFilterFactory implements FilterFactory<ILoggingEvent> {
@Override
public Filter<ILoggingEvent> build() {
return new Filter<>() {
@Override
public FilterReply decide(ILoggingEvent event) {
return event.getLevel() == Level.ERROR ?
FilterReply.ACCEPT :
FilterReply.DENY;
}
};
}
}
- Создать файл
<resources>/META-INF/services/io.dropwizard.logging.filter.FilterFactory
и заполните его именем класса фильтра. В моем примере файл содержит только одну строку:
foo.ErrorsOnlyFilterFactory
- Добавьте значение
@JsonTypeName
аннотации в appender config в разделеfilterFactories/type
(примечание:type
это массив, поэтому при необходимости вы можете указать несколько фильтров для каждого приложения):
logging:
appenders:
- type: file
currentLogFilename: errors.log
...
filterFactories:
- type: errors-only
Для каждого уровня ведения журнала, который вы хотите регистрировать отдельно, вы должны:
- создайте новый класс фильтра
- добавить новую строку в
META-INF/services/io.dropwizard.logging.filter.FilterFactory
- добавить новую конфигурацию приложения