java - 以编程方式从 log4j 获取日志事件

标签 java logging log4j2

我正在编写一个 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/

相关文章:

logging - slf4j 标记与 Fluent api 一起使用时会被 log4j2 配置忽略,但与非 Fluent api 一起使用时可以正常工作

java - 为什么在我的项目构建中找不到我的 jar 文件和 .war 文件? maven

unix:我可以在不丢失条目的情况下并行写入同一个文件吗?

python - 为什么调用 logging.info 会改变我的记录器打印的内容?

git - 在 git 中显示每个作者更改的行数

java - 在 Spring Boot 中记录 : Log4j2 Implementation using log4j2. 属性文件

java - liberty 配置文件配置问题 (log4j2)

java - 如何在本地安装项目的标记版本(即不是快照)而不是安装到 Maven 中心?

java - 在不同位置但在同一事件调度线程上调用时 JTree 不刷新

Java8 java.time : how to change the day of the week and the start time of the day?