我使用了log4j。Logger
和我已经使用FileAppender
将日志值写入文件。
现在我想在文本区域中显示日志值。如何将记录器值分配给字符串数组?
我将编写一个扩展org的类。阿帕奇。log4j。AppenderSkleton和(正如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;
}
}
您可以向记录器添加额外的
追加器
。使用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());
}
根据日志级别以及
StringWriter
的内容是否更改,您需要找到一种智能方法来更新TextArea
。
更新:此处提供了一个类似的解决方案。
如何在Go中获取字符串的字符数? 例如,如果我有一个字符串“hello”,该方法应该返回5。我看到返回字节数,而不是字符数,因此返回2而不是1,因为在UTF-8中用两个字节编码。
我有一个带有字符串的txt文件。我想通过文件获取包含文件中所有行的字符串数组。list(path.get(“path”))方法。 我试图使用toArray(),但它返回指向“path”目录中文件的路径数组 如何使用文件获取它。列表(路径。获取(“路径”))(这是必需的)?我有类似的东西
问题内容: 我有一个String变量(基本上是一个英语句子,带有未指定数量的数字),我想将所有数字提取到一个整数数组中。我想知道是否有使用正则表达式的快速解决方案? 我使用了Sean的解决方案,并对其进行了一些更改: 问题答案: …打印和。 -?匹配前导负号-可选。 d匹配一个数字,但是我们需要像Java String中那样编写。因此, d +匹配1个或多个数字。
问题内容: 有没有一种方法可以在Python中对字符串进行子字符串化,以从第三个字符到字符串末尾获取新的字符串? 也许喜欢吗? 如果离开第二部分意味着“直到最后”,而如果离开第一部分,它是否从头开始? 问题答案: Python称这个概念为“切片”,它不仅适用于字符串,还适用于更多的领域。看看这里的一个全面的介绍。
问题内容: 如何将(度)字符转换为字符串? 问题答案: 将此行放在源代码的顶部 如果您的编辑器使用其他编码,请替换为utf-8 然后,您可以直接在源代码中包含utf-8字符
我有一个字符串,它包含字节数组的元素,比如“[B@42B19E58”,我必须将它转换回字节数组。 有人能给我一个这样做的方法吗? 在这里,我不必将一个字符串转换为字节数组。我已经有字节数组元素在字符串中,我只需要把它们放回数组。