9
A
回答
13
您可以將另外的Appender
添加到Logger
。使用WriterAppender寫入一個StringWriter
那麼你TextArea
的內容更改爲StringWriter#toString()
示例代碼的價值:
public static void main(String[] args) {
Logger logger = Logger.getLogger("logger");
Layout layout = new PatternLayout();
StringWriter stringWriter = new StringWriter();
WriterAppender writerAppender = new WriterAppender(layout, stringWriter);
logger.addAppender(writerAppender);
TextArea textArea = new TextArea();
logger.error("test");
//if(stringWriter changed){// compare to old TextArea-content?
textArea.setText(stringWriter.toString());
//}
//System.out.println(stringWriter.toString());
}
,你需要找到一個聰明的方式更新TextArea
取決於日誌級別和如果StringWriter
的內容改變了。
更新:提供了類似的解決方案here。
3
我會寫一個擴展了org.apache.log4j.AppenderSkeleton的類,並且(如API建議的)覆蓋append(org.apache.log4j.spi.LoggingEvent)方法。通過LoggingEvent,您可以獲得所有必要的信息來構建要顯示的字符串。您也可以控制保存這些字符串的位置。你想讓他們在一個字符串數組中 - 沒問題。如果您只想記住最近n次記錄事件,則可以使用隊列。
這裏我的代碼(通過一個簡單的測試):
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Collections;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
public class StringArrayAppender extends AppenderSkeleton{
private Collection<String> log;
private int size;
public StringArrayAppender(int size) {
this.log = new ArrayDeque<String>(size);
this.size = size;
}
public String[] getLog() {
return log.toArray(new String[0]);
}
@Override
protected void append(LoggingEvent event) {
// Generate message
StringBuilder sb = new StringBuilder();
sb.append(event.getTimeStamp()).append(": ");
sb.append(event.getLevel().toString()).append(": ");
sb.append(event.getRenderedMessage().toString());
// add it to queue
if(log.size() == size) {
((ArrayDeque<String>) log).removeFirst();
}
log.add(sb.toString());
}
@Override
public void close() {
log = Collections.unmodifiableCollection(log);
}
@Override
public boolean requiresLayout() {
return false;
}
}
相關問題
- 1. 如何讀取字符串數組,從數組中獲取值
- 2. 如何從strings.xml中的字符串數組獲取字符串
- 3. 如何從字符串數組中獲取隨機字符串?
- 4. 如何從字符串數組中獲取字符串?
- 5. 如何獲取HttpHandler ProcessRequest中的字符串數組值。
- 6. 從字符串值文件夾中獲取字符串數組?
- 7. 如何從C中的字符數組中獲取字符串?
- 8. 從特定字符的數組中的字符串獲取值?
- 9. 如何從javascript中的字符串中獲取數字數組
- 10. 獲取字符串數組值
- 11. 如何獲取字符串數組的字符串長度?
- 12. 如何獲取EAX寄存器中的整數字符串值
- 13. 如何從JSON數組中獲取字符串值?
- 14. 如何使用字符串從多維數組中獲取值?
- 15. 如何從流中獲取字符串數組值?
- 16. 如何獲取字符串數組的項的屬性值?
- 17. LINQ的記錄,以字符串數組
- 18. PHP:匹配另一個字符串數組的子字符串的字符串數組獲取數組值
- 19. 如何獲取字符串數組的值?
- 20. 如何從字符串中獲取值?
- 21. 獲取遠程服務器上的數組的字符串值
- 22. 使用雄辯獲取字段中的數組值的記錄
- 23. 如何從JSON數組中獲取字符串數組?
- 24. 如何從字符串數組中獲取最大字符匹配字符串
- 25. PHP:使用數組中值的字符串「地址」獲取值
- 26. 如何僅從Twitter獲取特定的字符串或記錄
- 27. 如何從socketTextStream獲取字符串格式的記錄
- 28. 如何在objective-c中的字符串數組中獲取數值的總和?
- 29. 如何獲取字節數組中的字符串?
- 30. 如何在JSDoc中記錄一個字符串double數組?
什麼做你想做的節目?堆棧跟蹤?或錯誤消息? – Jaiwo99
我想顯示Level.TRACE – praba
我沒有看到直接的方式,如果你想在你的應用程序中顯示,你可以閱讀該文件並在那裏顯示 –