【问题标题】:How can we store the log4j messages to a java util list我们如何将 log4j 消息存储到 java util 列表
【发布时间】:2014-09-04 05:38:18
【问题描述】:

我想将 log4j 消息存储到 java util list 中,然后从列表中获取 log4j 消息。那么我们如何将 log4j 消息存储到列表中。请帮助我如何做到这一点。

【问题讨论】:

  • 你为什么要这样做,列表无疑会把你的内存填满到一个点它会产生一个内存不足的异常。解析读取日志文件不是更好吗?
  • 我正在编写“应用程序”而不是服务。因此,日志文件的长度受到应用程序调用的任何输出的限制,如果应用程序因内存不足而崩溃,那么输入就太大了。在我的特殊情况下,应用程序是“编译器/linter”,日志文件是错误消息(和主要输出),但我想使用 log4j 以便用户可以配置他们想要查看的消息。但它们也在不同的列表中分层,而不仅仅是按时间排序。

标签: java list log4j swt


【解决方案1】:

根据您使用的 Appender,您可以例如创建此自定义 Appender,它定期附加消息并将其缓存在列表中:

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.spi.LoggingEvent;

public class MyRollingFileAppender extends RollingFileAppender {

    private List<LoggingEvent> events = new ArrayList<>();

    @Override
    public synchronized void doAppend(LoggingEvent event) {
        events.add(event);
        super.doAppend(event);
    }

    public synchronized List<LoggingEvent> getEvents() {
        List<LoggingEvent> clone = new ArrayList<>(events);
        events.clear();
        return clone;
    }

}
  • 您当然可以覆盖您希望的任何其他 Appender,并记录或“取消记录”消息(事件)

【讨论】:

  • 我还需要将日志消息推送到列表时的时间戳保存在列表中。那么我们如何获取并推送到列表中。
  • LoggingEvent 类有一个 'long getTimeStamp()' 方法,它将返回记录消息的时间。
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2021-11-29
  • 2019-03-02
  • 1970-01-01
相关资源
最近更新 更多