如何将所有logback错误放入字符串中

use*_*361 0 java logging logback slf4j

假设我有一个包含 20 个类的程序,每个类都有private static Logger logger = LoggerFactory.getLogger(SomeClass.class);. 这 20 个类将记录警告、信息、调试或错误。

在其中一个类中,我如何才能访问迄今为止在程序中记录的所有错误(跨所有类)?注意我对将所有这些转储到 a 不感兴趣.log,我想从 Java 程序中访问它们。

Kar*_*sad 5

使用自定义附加程序添加到单例列表中,您可以使用它来访问所有不匹配项。

CustomAppender.java

public class CustomAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {

    @Override
    protected void append(ILoggingEvent eventObject) {
        if(eventObject.getLevel() == Level.WARN){
        {
            KPLogHolder.addData(eventObject.getMessage);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

用于保存消息的单例 Java 类KPLogHolder.java

public class KPLogHolder {

    private static List<String> holder;

    public static List<String> getLog(){
        if(holder== null){
            return new ArrayList<String>();
        }
        return holder;
    }

    public static void addData(String item){
        getLog().add(item);
    }

}
Run Code Online (Sandbox Code Playgroud)

并访问消息。

public class KPTest{

    @Test
    public void testLog(){
        LOG.warn("Warning!!!!");

        for(String str: KPLogHolder.getLog()){
                System.out.println(str);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有使用同步,您需要实现这些同步,因为 ArrayList 未同步。不知道为什么有这个要求,但要小心。大多数情况下,这些都会导致错误的实现,在某些情况下,它会导致您的服务器瘫痪。如果没有正确实施。