Ahi*_*iel 1 filter logback appender
我想为每个记录器配置日志行的速率限制(例如:每个记录器每分钟最多可以发送100条日志行)。
我有想法,是否应该使用新的简单过滤器(我认为TurboFilter不适合)?还是一个新的appender?过滤器听起来更合适,但是其他过滤器可以替代我的决定,这就是为什么我认为要使用appender实现它。
你有什么想法?
我已经编写了自己的过滤器。它看起来像这样:
public class ThresholdFilter extends Filter<ILoggingEvent> {
private final Cache<String/*Logger*/, AtomicInteger> loggerRates = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES).build();
@Override
public FilterReply decide(ILoggingEvent event) {
return (isStarted() && (getLimit(event.getLoggerName()) > 100)) ? FilterReply.DENY : FilterReply.NEUTRAL;
}
private int getLimit(String loggerName) {
int i = 0;
try {
i = loggerRates.get(loggerName, () -> new AtomicInteger(0)).incrementAndGet();
} catch (ExecutionException ignored) {
}
return i;
} }
Run Code Online (Sandbox Code Playgroud)
然后将此过滤器添加到logback.xml中的我的附加程序中
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="org.ahiel.ThresholdFilter">
<encoder><pattern>[%thread] %-5level %logger{35} - %msg %n</pattern></encoder>
</appender>