Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与从log4j输出的应用程序日志交互的最佳方式(同时也由应用程序更新)_Java_Multithreading_File_File Io_Log4j - Fatal编程技术网

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

Java 与从log4j输出的应用程序日志交互的最佳方式(同时也由应用程序更新),java,multithreading,file,file-io,log4j,Java,Multithreading,File,File Io,Log4j,可能比我想象的要简单,但我对以下几点感到困惑: 我希望能够向用户(在图形界面中)展示Log4j生成的日志 我可以按原样读取文件并将其显示出来,但我想知道是否有一种标准的方法来执行此操作,以便同时从应用程序的其他并发日志部分获取任何更新 log4j文件可以是多个文件,即滚动附件 也可以在没有日志记录的情况下进行演示。 即查看最新的日志 更新: 我受Java 6的约束您可以使用Java 7的NIO2库在目录中的多个文件之一被修改时获得通知,并重新读取和显示它: 您可以使用Java 7的NIO2库在目

可能比我想象的要简单,但我对以下几点感到困惑:

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

我可以按原样读取文件并将其显示出来,但我想知道是否有一种标准的方法来执行此操作,以便同时从应用程序的其他并发日志部分获取任何更新

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

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

更新:

我受Java 6的约束

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


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


您是否尝试过以下工具:


您是否尝试过以下工具:


可能添加一个数据库appender(jdbcapender)并显示其中的日志项?

可能添加一个数据库appender(jdbcapender)并显示其中的日志项?

从log4j的:

有没有办法让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配置。

对于log4j:

有没有办法让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配置。

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

但是,从Java关闭此进程时可能会遇到问题。 如果您知道进程id,您应该能够向它发送SIGTERM信号。或者您可以启动另一个进程,该进程可以查找“tail”进程的id,并通过“kill”命令或类似命令将其杀死


另外,如果这是您的平台,我不确定windows上是否有类似的工具可用。

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

但是,从Java关闭此进程时可能会遇到问题。 如果您知道进程id,您应该能够向它发送SIGTERM信号。或者您可以启动另一个进程,该进程可以查找“tail”进程的id,并通过“kill”命令或类似命令将其杀死


另外,如果这是您的平台,我不确定windows上是否有类似的工具可用。

如果您编写自己的简单appender,并让应用程序在log4j配置中包含该appender,则每当事件写入其他appender时,都会调用appender,您可以选择显示事件消息,UI中的时间戳等。

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

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

按照以下步骤操作

  • 从下载并安装XpoLog

  • 使用和中的log4j数据连接器添加log4j数据

  • 部署log4j应用程序


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

    按照以下步骤操作

  • 从下载并安装XpoLog

  • 使用和中的log4j数据连接器添加log4j数据

  • 部署log4j应用程序


  • 我只能使用Java6。但是+1在这种情况下,恐怕唯一要做的就是手动对文件进行定期轮询,查看它们是否已更改并重新播放…我只能使用Java 6。但是+1在这种情况下,恐怕唯一要做的就是手动对文件进行定期轮询,查看它们是否已更改并重新播放…除了日志级别,log4j.properties中还有哪些更改对您很重要?要推出和附加的文件数量和大小。我认为转换模式没有日志级别那么重要log4j.properties中还有哪些更改对您很重要文件的大小,以及我附加的文件的大小