【问题标题】:Docker container not printing logs not location specified in log4j2.xmlDocker 容器不打印日志而不是 log4j2.xml 中指定的位置
【发布时间】:2020-05-16 12:00:31
【问题描述】:

我已经为我的 Spring 启动应用程序配置了一个 Docker 镜像。我还使用 log4j.xml 配置了日志。但是,在运行 docker 映像时,日志既不会打印在 docker 日志中,也不会打印在 log4j.xml 中指定的位置。

下面是我的 Dockerfile

FROM openjdk:8
ADD <relative path to jar>/jar-name.jar jar-name.jar
ADD <relative path to property file>/application.properties /app/application.properties
ADD <relative path to log4j file>/log4j2-8081.xml /logs/log4j2-8081.xml
ENV JAVA_OPTS="8080"
ENTRYPOINT ["java", "-Dapp.home=classpath:file:/app/", "- 
Dlog4j.configurationFile=classpath:file:/logs/log4j2-8081.xml", "-jar", "jar-name.jar"]

执行docker run命令时需要传递log4j.xml文件路径。 提前致谢

Docker 运行命令:-

docker run -p 8081:8081 -e JAVA_OPTS=-Dserver.port=8081 rdsstg

【问题讨论】:

  • 你在 log4j 中的日志路径目录是什么?您将需要在 Docker 中创建目录并重试。此外,当您运行 spring 应用程序时,日志配置是什么 - 在控制台或文件上打印。如果是文件,目录应该存在
  • 我想在容器外创建日志。在系统的位置 /log 中。

标签: java spring-boot docker logging log4j2


【解决方案1】:

因此,根据您的查询,您是说日志没有按照应用程序代码和 docker 容器中的 log4j 配置打印,请纠正我的推论。谢谢。

现在根据您的评论,

我想在容器外创建日志。在系统的位置/log中。

答案是使用volumes,其中提供了主机和docker容器的路径。最基本的用法是使用-v option 见下文。如需深入了解,请参考Use volumes了解更多详情。

docker run -p 8081:8081 -e JAVA_OPTS=-Dserver.port=8081 -v /host_machine/log:/container/var/app/log rdsstg

但是,您确实需要了解,为了让您的 docker 容器在主机上引导日志文件(或任何文件),这些文件应该在容器中生成,即应用程序日志记录应该是在容器中工作。这是你的#1

让我知道以上是否有意义。

  • 附注

    对于-e 的用法,我建议使用--env-file 选项,这样您就可以将多个环境变量保存在一个文件中,而不是传递多个-e。

在 cmets 部分很难解释。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2017-02-23
    • 2021-12-22
    • 2015-07-08
    • 2019-10-12
    相关资源
    最近更新 更多