我正在编写一个 Web 应用程序,用户(以及其他许多事情)可以在其中构建和运行自己的脚本。这些脚本在后端运行,它们可能会也可能不会生成错误 - 此类错误此时会写入系统日志。
用户通过 Web 应用程序本身查看此类日志事件是有益的,因此我正在考虑以某种方式从 log4j 中管道和过滤它们(在事件击中磁盘之前),以便我可以进行编程访问给他们。 Elasticsearch 具有与此类似的功能 - 当未找到结果时,它会显示给定时间范围内发生的错误。
我想我可以抽象出日志记录,并确保所有事件都发送到 log4j 和客户端,但我希望有更好的方法,而不必接触记录器调用(或有从日志文件中读取)。
查看了 log4j2 网站,但没有找到任何有用的东西 - 有什么想法如何实现这样的事情吗?
最佳答案
要拦截日志记录事件,您可以将您的部分插入三个点:
log4j 之后:让 Log4j 记录到您可以在应用程序中轻松“查询”的内容。有多种可用的 Appender 对此很有用。记录到数据库是一种选择,您可以记录到标准输出并将其重定向到您的应用程序,这样您就可以获得某种流
使用附加程序:您可以实现自己的附加程序,使用 log4j 配置它并在其中执行您想要的任何操作。
在 log4j 之前:将对 Log4j Logger 的每个调用包装到您自己的实现中,并在实际记录事件之前或之后在其中执行逻辑。
appender 方法似乎是最优雅的:它允许使用 log4j 配置选项来控制前端中显示的内容和不显示的内容,并且由于appender 是在同一个文件中配置的,因此不太可能有人禁用由于没有意识到日志记录对用户很重要。但它需要对 log4j 内部结构有最多的了解。
关于java - 以编程方式从 log4j 获取日志事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890553/