假設我有一個包含20個類的程序,每個類都有private static Logger logger = LoggerFactory.getLogger(SomeClass.class);
。這20個類將記錄警告,信息,調試或錯誤。如何獲取所有的logback錯誤到字符串中
在其中一個類中,我如何才能訪問到目前爲止(在所有類中)記錄在程序中的所有錯誤?注意:我不想將所有這些轉儲到.log
,我想從Java程序中訪問它們。
假設我有一個包含20個類的程序,每個類都有private static Logger logger = LoggerFactory.getLogger(SomeClass.class);
。這20個類將記錄警告,信息,調試或錯誤。如何獲取所有的logback錯誤到字符串中
在其中一個類中,我如何才能訪問到目前爲止(在所有類中)記錄在程序中的所有錯誤?注意:我不想將所有這些轉儲到.log
,我想從Java程序中訪問它們。
當所有類都將日誌記錄到.log文件中或想要在日誌記錄發生時繼續訪問時,是否要訪問它?
如果您想在日誌功能後訪問這20個類中的所有日誌,那麼爲什麼不在以後的其他java程序中讀取.log文件來訪問所有日誌。
但我想你需要在你的日誌文件中的一個指標來確定那些語句已被這20個類記錄下來。比方說在是ConsoleAppender配置一些字符串
不是很困難 - 要麼 讀取日誌文件 或 Overrider your log4j framework
所以不是記錄到文件,它應該將數據記錄到Java對象(這將是非常內存密集型)。
使用自定義appender添加到列表,這是單例列表使用您可以訪問所有不匹配。
CustomAppender.java
public class CustomAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
@Override
protected void append(ILoggingEvent eventObject) {
if(eventObject.getLevel() == Level.WARN){
{
KPLogHolder.addData(eventObject.getMessage);
}
}
}
一個Singleton 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的不同步。不知道爲什麼這個要求,但要小心。大多數情況下,這些都會導致錯誤的實現,這種情況會導致服務器失效。如果沒有正確執行。
訪問正在記錄直接從Logger或LoggerFactory發生。我根本不想去.log文件,但將它全部保存在Java程序中。 – user2763361
我想你爲什麼要這樣做,當你有一個記錄器。對我來說似乎是一個奇怪的要求通過java代碼實現這個邏輯將會很困難。可以創建一個HashMap>,其中Key爲Logger級別,列表包含該級別的所有錯誤。但是你必須通過這些我認爲不好的地圖 –
vikeng21