如何使用Log4j在第三方应用程序中配置JSON Logging?

mmvthczy  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(150)

我们使用zeebe分布式工作流引擎,它使用log4j作为日志框架。这是一个通过helm部署在kubernetes上的spring Boot 应用程序。不幸的是,它不包括支持json日志记录的log4j-layout-template-json jar。任何需要第三方应用程序代码修改的方法看起来都不正确,因为项目正在积极开发中。我们需要不断升级第三方应用程序,因此分叉会使部署变得更加困难。
有什么可能的方法来配置它的json日志记录,以便日志可以运送到EFK堆栈?
谢谢

lnvxswe2

lnvxswe21#

现在我会创建自己的镜像,然后创建并发出一个pull请求,将缺失的依赖项导入Zeebe,这样将来它就会存在。https://github.com/camunda/zeebe/blob/main/CONTRIBUTING.md

jaxagkaj

jaxagkaj2#

一般的解决方案很简单:您需要将log4j-layout-template-json添加到应用程序的类路径中,并使用其他库创建Docker镜像。
魔鬼就在细节中:每个发行版都有不同的方法将库添加到类路径。
Camunda Zeebe似乎正在使用Appassembler来创建其二进制发行版,该发行版使用this script来 Boot 应用程序。所以你有两个选择

  • 要么直接将库添加到/usr/local/zeebe/lib,将Log4j Core配置文件添加到/usr/local/zeebe/config
  • 或者在另一个位置添加库并相应地设置CLASSPATH_PREFIX环境变量。

例如,您可以添加额外的Log4j Core模块和自定义配置文件到/usr/local/log4j2目录,Docker文件如下所示:

  1. FROM camunda/zeebe:latest
  2. # Download additional Logj4 2.x artifacts
  3. RUN apt -y update && apt -y install curl
  4. RUN curl -SL https://dist.apache.org/repos/dist/release/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.tar.gz | \
  5. tar -xz --strip-components=1 --one-top-level=/usr/local/log4j2 \
  6. apache-log4j-2.20.0-bin/log4j-appserver-2.20.0.jar \
  7. apache-log4j-2.20.0-bin/log4j-jul-2.20.0.jar \
  8. apache-log4j-2.20.0-bin/log4j-layout-template-json-2.20.0.jar
  9. # Add a custom configuration file
  10. COPY log4j2.xml /usr/local/log4j2/
  11. # Check artifacts
  12. ARG LOG4J_APPSERVER_SUM=53d8e78277324145cde435b515b1c7f1ba02b93e7a1974411ce7c5511a8c6b69
  13. ARG LOG4J_JUL_SUM=c9b33dffb40bd00d4889ea4700f79d87a2e4d9f92911a3a008ae18c0bb3fb167
  14. ARG LOG4J_LAYOUT_TEMPLATE_JSON_SUM=62d2c2b8e80a74ca65d80cf2f9aa0eab3a1350349c7b03b428c5b53004cc751b
  15. RUN sha256sum -c <<EOF
  16. ${LOG4J_APPSERVER_SUM} /usr/local/log4j2/log4j-appserver-2.20.0.jar
  17. ${LOG4J_JUL_SUM} /usr/local/log4j2/log4j-jul-2.20.0.jar
  18. ${LOG4J_LAYOUT_TEMPLATE_JSON_SUM} /usr/local/log4j2/log4j-layout-template-json-2.20.0.jar
  19. EOF
  20. # Add additional classpath entries
  21. ENV CLASSPATH_PREFIX=/usr/local/log4j2/*:/usr/local/log4j2
  22. # Use Log4j also for java.util.logging
  23. ENV JAVA_OPTS=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
  24. # Start the application
  25. ENTRYPOINT ["tini", "--", "/usr/local/bin/startup.sh"]
展开查看全部

相关问题