如何使用 Log4j 在第三方应用程序中配置 JSON 日志记录?

问题描述 投票:0回答:2

我们正在使用zeebe分布式工作流引擎,该引擎使用log4j作为其日志框架。它是一个通过 helm 在 kubernetes 上部署的 Spring Boot 应用程序。不幸的是,它不包括启用 json 日志记录的

log4j-layout-template-json
jar。由于该项目正在积极开发中,因此任何需要修改第三方应用程序代码的方法看起来都不合适。我们需要不断升级第三方应用程序,因此分叉它会使部署变得更加困难。

有哪些可能的方法可以将其配置为 json 日志记录,以便将日志发送到 EFK 堆栈?

谢谢

java json kubernetes log4j
2个回答
0
投票

一般解决方案很简单:您需要将

log4j-layout-template-json
添加到应用程序的类路径中,并使用附加库创建 Docker 映像。

问题在于细节:每个发行版都有不同的方法将库添加到类路径。

Camunda Zeebe 似乎正在使用 Appassembler 创建其二进制发行版,该发行版使用 this script 来启动应用程序。所以你有两个选择:

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

例如,您可以使用如下 Docker 文件将其他 Log4j Core 模块和自定义配置文件添加到

/usr/local/log4j2
目录:

FROM camunda/zeebe:latest

# Download additional Logj4 2.x artifacts
RUN apt -y update && apt -y install curl
RUN curl -SL https://dist.apache.org/repos/dist/release/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.tar.gz | \
  tar -xz --strip-components=1 --one-top-level=/usr/local/log4j2 \
    apache-log4j-2.20.0-bin/log4j-appserver-2.20.0.jar \
    apache-log4j-2.20.0-bin/log4j-jul-2.20.0.jar \
    apache-log4j-2.20.0-bin/log4j-layout-template-json-2.20.0.jar
# Add a custom configuration file
COPY log4j2.xml /usr/local/log4j2/

# Check artifacts
ARG LOG4J_APPSERVER_SUM=53d8e78277324145cde435b515b1c7f1ba02b93e7a1974411ce7c5511a8c6b69
ARG LOG4J_JUL_SUM=c9b33dffb40bd00d4889ea4700f79d87a2e4d9f92911a3a008ae18c0bb3fb167
ARG LOG4J_LAYOUT_TEMPLATE_JSON_SUM=62d2c2b8e80a74ca65d80cf2f9aa0eab3a1350349c7b03b428c5b53004cc751b
RUN sha256sum -c <<EOF
${LOG4J_APPSERVER_SUM} /usr/local/log4j2/log4j-appserver-2.20.0.jar
${LOG4J_JUL_SUM} /usr/local/log4j2/log4j-jul-2.20.0.jar
${LOG4J_LAYOUT_TEMPLATE_JSON_SUM} /usr/local/log4j2/log4j-layout-template-json-2.20.0.jar
EOF

# Add additional classpath entries
ENV CLASSPATH_PREFIX=/usr/local/log4j2/*:/usr/local/log4j2
# Use Log4j also for java.util.logging
ENV JAVA_OPTS=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

# Start the application
ENTRYPOINT ["tini", "--", "/usr/local/bin/startup.sh"]

0
投票

我现在会创建自己的映像,然后创建并发出拉取请求,以将缺少的依赖项获取到 Zeebe 中,因此将来它会存在。 https://github.com/camunda/zeebe/blob/main/CONTRIBUTING.md

© www.soinside.com 2019 - 2024. All rights reserved.