Java Docker&x2B;Log4j最佳实践

Java Docker&x2B;Log4j最佳实践,java,maven,docker,log4j,Java,Maven,Docker,Log4j,我正在构建一个小型Java应用程序,通过Java-jar myJar.jarentrypoint命令在OpenJDK docker上运行。 我想使用Log4j添加日志记录配置。 以下是我知道的(?)我应该做的: 1.将log4j.xml保存在单独的源文件夹中,如src/resource。 2.将log4j.xml保存在docker的JAR文件之外,以允许在运行时进行配置。 3.让JVM知道log4j.xml文件在哪里(可能使用classpath) 实现这一点有多种方法-log4j.xml位置可以

我正在构建一个小型Java应用程序,通过
Java-jar myJar.jar
entrypoint命令在OpenJDK docker上运行。 我想使用Log4j添加日志记录配置。
以下是我知道的(?)我应该做的:

1.将log4j.xml保存在单独的源文件夹中,如src/resource。
2.将log4j.xml保存在docker的JAR文件之外,以允许在运行时进行配置。
3.让JVM知道log4j.xml文件在哪里(可能使用classpath)

实现这一点有多种方法-log4j.xml位置可以通过
jar-jar
命令的参数进行配置,可以添加到mvn插件中,也可以作为命令添加到Dockerfile中(可能?)


在pom.xml/Dockerfile/Docker entrypoint命令中包含所有这些配置的最佳做法是什么?

据我所知,根据Mihai的评论和其他资源,docker映像应该构建为支持日志配置,该配置将在容器午餐时包含(例如使用docker运行参数)。这样,映像就足够灵活,可以支持不同的调试级别。
与非停靠log4j通常的工作方式(或我对它的理解)不同,更改调试级别现在包括停止旧的正在运行的容器,并使用具有不同运行时配置的相同映像装载新容器。
例如,如果图像名称为dockerTestImage。 我们首先要做的是:
docker run-DebugLevel=INFO dockerestimage


然后,如果出于任何原因需要更详细的日志记录,我们将停止旧容器并使用
docker run-DebugLevel=DEBUG dockerestimage
运行新容器

据我所知,在Mihai的评论和其他参考资料之后,docker映像的构建应该支持一个日志配置,该配置将在容器午餐时包含(例如使用docker运行参数)。这样,映像就足够灵活,可以支持不同的调试级别。
与非停靠log4j通常的工作方式(或我对它的理解)不同,更改调试级别现在包括停止旧的正在运行的容器,并使用具有不同运行时配置的相同映像装载新容器。
例如,如果图像名称为dockerTestImage。 我们首先要做的是:
docker run-DebugLevel=INFO dockerestimage


然后,如果出于任何原因需要更详细的日志记录,我们将停止旧容器并使用
docker run-DebugLevel=DEBUG dockerestimage
运行新容器

当您决定转到Docker时,您不应该再依赖容器中的日志。因此,请确保在log4j中添加一个控制台追加器。这样,您可以从容器外部拾取日志(如果您更改日志驱动程序,可以使用docker日志或其他容器。在我看来,当您决定移动到docker时,log4j.xml的位置并不重要。我理解这一点,但我仍然需要我提到的配置+log4j.xml,以便能够在docker运行时更改调试级别,对吗?或者最好的做法是这样的ice for docker只是为了让它保持在信息级别?理想情况下,容器启动后内部不会发生任何变化。您可以为dev和prod构建,并在构建时使用不同的配置文件。也就是说,您应该能够在不登录容器的情况下查看所需的所有日志。您可以构建映像。当您基于您可以通过环境变量指定日志记录的方式。这是一种方法。或者,您可以为每个环境构建不同的映像。通常,您只希望在开发中进行调试,而且最确定的是,这还附带了特定于开发的其他设置。您不希望这些设置泄漏到生产中。因此,这是一种解决方案为特定配置文件(开发、生产等)构建图像的良好实践。您是否更改正在运行的应用程序中的日志级别?docker映像可以在需要时重建。因此,可以更改日志级别。如果您非常喜欢日志记录,您应该查看ELK堆栈。将所有内容都放到调试中,然后从ElasticSearch对其进行筛选和索引。当您决定移动到docker时,您不应该再依赖日志因此,请确保在log4j中添加一个控制台appender。这样,您可以从容器外部拾取日志(如果您更改日志驱动程序,可以使用docker日志或其他容器。在我看来,当您决定移动到docker时,log4j.xml的位置并不重要。我理解这一点,但我仍然需要我提到的配置+log4j.xml,以便能够在docker运行时更改调试级别,对吗?或者最好的做法是这样的ice for docker只是为了让它保持在信息级别?理想情况下,容器启动后内部不会发生任何变化。您可以为dev和prod构建,并在构建时使用不同的配置文件。也就是说,您应该能够在不登录容器的情况下查看所需的所有日志。您可以构建映像。当您基于您可以通过环境变量指定日志记录的方式。这是一种方法。或者,您可以为每个环境构建不同的映像。通常,您只希望在开发中进行调试,而且最确定的是,这还附带了特定于开发的其他设置。您不希望这些设置泄漏到生产中。因此,这是一种解决方案为特定配置文件(开发、生产等)构建图像的良好实践。您是否更改正在运行的应用程序中的日志级别?docker映像可以在需要时重建。因此,可以更改日志级别。如果您非常喜欢日志记录,您应该查看ELK堆栈。将所有内容都放到调试中,然后对其进行筛选,并从ElasticSearch对其编制索引。