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

标签 java logging slf4j logback

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

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

最佳答案

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

CustomAppender.java

public class CustomAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {

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

用于保存消息的单例 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);
    }

}

并访问消息。

public class KPTest{

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

        for(String str: KPLogHolder.getLog()){
                System.out.println(str);
        }
    }
}

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

关于java - 如何将所有logback错误放入字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22496244/

相关文章:

logging - 如何以编程方式向现有 XML 配置添加新的记录器和附加器

java - SLF4J记录器的Spring构造函数注入(inject)-如何获取注入(inject)目标类?

spring - java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory Spring boot 1. 5.2 Maven

Javacc 解析器选项 LOOKAHEAD,Java

java - weblogic、jdk1.5内存问题

java - 在日志记录期间屏蔽 Java 中的某些字符串属性?

logging - 使用 Log4J2 时,我应该编码为 SLF4J 还是 Log4J2 API?

java - GoogleMap addPolygon 引发有关空列表的异常

java - Jax-WS 和 Spring-security 冲突

java - Jenkins 在 Maven 构建期间使用依赖项中的 LOG4j 配置而不是我的配置