假设我有一个包含20个类的程序,每个类都有private static Logger logger = LoggerFactory.getLogger(SomeClass.class);
。这20个类将记录警告,信息,调试或错误。
在其中一个类中,如何才能访问到目前为止(在所有类中)记录在程序中的所有错误?注意我对将所有这些转储到.log
不感兴趣,我希望从Java程序中访问它们。
答案 0 :(得分:3)
使用自定义appender添加到单个列表的列表,使用它可以访问所有不匹配。
<强> 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);
}
}
访问mssage。
public class KPTest{
@Test
public void testLog(){
LOG.warn("Warning!!!!");
for(String str: KPLogHolder.getLog()){
System.out.println(str);
}
}
}
注意我没有使用您需要实现的同步,因为未同步ArrayList。不知道为什么这个要求,但要小心。大多数情况下这些都是错误的实现,有这种情况会导致你的服务器崩溃。如果没有正确实施。
答案 1 :(得分:0)
当所有类都已在.log文件中记录该语句,或者您希望在日志记录发生时继续访问时,是否要访问它。
如果要在日志记录功能之后访问这20个类中的所有日志,那么为什么不在以后的其他java程序中读取.log文件来访问所有日志。
但我想你需要在你的日志文件中有一个指示器来确定这20个类已经记录了那些语句。比如说在consoleappender配置中的一些字符串
答案 2 :(得分:-1)
不是很难 -
或
读取日志文件
要么
Overrider your log4j framework
因此,它不应该记录到文件,而应该将数据记录到java对象(这将是非常耗费内存的。)