gpt4 book ai didi

java - Logback:通过过滤器修改消息?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:55 24 4
gpt4 key购买 nike

是否可以在匹配过滤器后修改日志事件?

我有一个 Web 容器 (Jersey),它在 ERROR 级别记录未捕获的异常。但是,对于服务器 (Jetty) 抛出的某些异常 (EofException),我想将它们记录在较低级别 (INFO)。

我可以使用匹配异常类型 (EofException) 的 Logback 过滤器完全删除这些消息。但是我还没有找到支持的方法来修改日志事件,例如更改日志级别。

最佳答案

您可以使用 TurboFilter 模拟此行为,方法是使用提供的记录器记录您自己修改的消息,并拒绝原始消息。

不过,我不认为这种 hack 是个好主意。

package com.example.logback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.turbo.TurboFilter;
import ch.qos.logback.core.spi.FilterReply;

public class LogbackTest
{
private static class ModifyingFilter
extends TurboFilter
{
@Override
public FilterReply decide(
Marker marker,
ch.qos.logback.classic.Logger logger,
Level level,
String format,
Object[] params,
Throwable t)
{
if (level == Level.ERROR &&
logger.getName().equals("com.example.logback.LogbackTest") &&
format.equals("Connection successful: {}"))
{
logger.debug(marker, format, params);
return FilterReply.DENY;
}

return FilterReply.NEUTRAL;
}
}

public static void main(String[] args)
{
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.addTurboFilter(new ModifyingFilter());

Logger logger = LoggerFactory.getLogger(LogbackTest.class);
logger.error("Connection successful: {}", "no problem", new RuntimeException("Hi"));
}
}

关于java - Logback:通过过滤器修改消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com