假设我有一个包含 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/