与log4j输出的应用程序日志交互的最佳方式(同时也由应用程序更新)

时间:2012-01-18 13:01:29

标签: java multithreading file file-io log4j

可能比我想的要简单,但我对以下内容感到困惑:

我希望能够向用户(在图形界面中)显示Log4j生成的日志。

我可以直接读取文件并显示它,但我想知道是否有一种标准的方法来实现它,以便同时从应用程序的其他部分获得任何更新同时记录。

log4j文件可以是多个,即滚动appender

也可以在没有记录的情况下进行演示 即日志查看最新

更新
我是Java 6的约束

7 个答案:

答案 0 :(得分:1)

您可以使用Java 7的NIO2库在目录中修改多个文件中的一个时收到通知,并重新读取&显示它:

http://blogs.oracle.com/thejavatutorials/entry/watching_a_directory_for_changes

答案 1 :(得分:0)

您是否尝试过以下工具:

Chainsaw

Xpolog

答案 2 :(得分:0)

也许添加数据库appender(JDBCAppender)并从中显示日志条目?

答案 3 :(得分:0)

了解log4j的official documentation

有没有办法让log4j在配置文件发生变化时自动重新加载?

Yes. Both the DOMConfigurator and the PropertyConfigurator support automatic reloading
through the configureAndWatch method. See the API documentation for more details.

对于使用GUI按需重新加载log4j配置,我建议通过J2EE应用程序中的servlet公开它,以便可以在网页中编辑整个文件(文本区域可能是),一旦保存,您可以覆盖现有的log4j文件并重新加载log4j config。

答案 4 :(得分:0)

也许您可以考虑更多“操作系统级”解决方案。 我不知道你是使用win还是linux,但是在Linux上有一个非常好的命令“tail”。 因此,您可以使用ProcessBuilder创建操作系统进程,类似于“tail -f yourLogFile.txt”。 然后读取返回的Process的OutputStream。读取流将阻止等待进程的新输出可用,并在可用时立即取消阻止,为您提供即时反馈并可以读取日志文件的最新更改。

但是,您可能无法从Java关闭此过程。 如果您知道进程ID,则应该能够向其发送SIGTERM信号。或者你可以启动一个不同的进程,它可以查找“尾部”进程的id并通过“kill”命令或类似的东西杀死它。

此外,我不确定Windows上是否有类似的工具,如果这是您的平台。

答案 5 :(得分:0)

如果您编写自己的简单appender并让您的应用程序在log4j配置中包含该appender,则只要将事件写入其他appender就会调用appender,并且您可以选择显示事件消息,时间戳等。用户界面。

答案 6 :(得分:0)

尝试XpoLog log4j / log4net连接器。它会自动解析数据,并为其预定义了一组仪表板:

按照以下步骤

  1. here

  2. 下载并安装XpoLog
  3. 使用here

  4. 中的log4j数据连接器添加log4j数据
  5. 部署log4j应用here