如何将所有logback错误转换为String

时间:2014-03-19 04:30:54

标签: java logging slf4j logback

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

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

3 个答案:

答案 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对象(这将是非常耗费内存的。)