Log4j.properties中的条件日志记录级别

时间:2013-11-15 06:46:44

标签: java

是否可以在log4j.properties中包含条件。我有一种情况,我希望将日志记录级别设置为生产环境中的Info和本地DEBUG。是否可以在log4j.properties中读取环境变量。

7 个答案:

答案 0 :(得分:3)

不,你必须拥有2个不同的log4j.properties文件

答案 1 :(得分:2)

配置日志记录应该作为部署的一部分发生,而不是作为构建的一部分,即您不应该为不同的日志配置创建多个构建,引入工件的其他差异的风险也很大。

创建包含默认配置的ONE版本,可能是您要在生产中使用的版本。

实现一种查找和使用备用配置的方法,而无需更改工件。大多数情况下,这是通过向应用程序的类路径添加其他目录并在其中存储log4j配置来实现的。您可以使用优先级高于工件中包含的配置格式的log4j default initialization。这也允许您在没有新部署的情况下重新配置日志记录,这在进行故障排除时非常有用。

或者,您可以在启动时通过环境变量提供配置文件的位置:-Dlog4j.configuration=log4j-prod.xml(借用Keerthi Ramanathan的答案)

答案 2 :(得分:1)

您可以准备不同的构建版本并确定要在构建时包含哪些log4j.propeties,例如使用maven参数,配置文件或任何其他方式。 无法在log4j.properties

中声明条件

答案 3 :(得分:1)

没有。 但只是概述一些其他选项

a)我建议您查看logback,它提供了一个简单的log4j外观,然后您可以在运行时更改您的配置。可以找到相关文档here

b)如果你有一个构建过程(ant / maven),你可以在构建过程中进行替换。如果您使用maven,则可以设置profile to build 并在构建周期中应用filtering

c)从conf目录中为每个环境加载log4j文件。这样做的想法是,为环境设置的文件随着时间的推移会发生最小的变化。您可以在存储库中进行维护,也可以作为部署过程的一部分,确保添加/删除其他/已删除的文件/道具。

答案 4 :(得分:0)

我建议在评论中说,为每个环境都有一个单独的log4j属性文件版本,并遵循命名约定以便于维护。比方说,对于开发环境,它将是log4j-dev.xml,对于生产,它是log4j-prod.xml。现在,您可以使用

配置在运行时选择的相应文件
-Dlog4j.configuration=log4j-prod.xml

在服务器启动期间。因此,log4j将采用适当的配置文件。

答案 5 :(得分:0)

使用log4j时可以使用编程配置,这使您可以更好地控制在什么环境中使用哪些选项。您可以拥有自己的配置文件,并使用自己的逻辑将它们转换为log4j配置。缺点是你需要在应用程序的某个地方执行init()。 This answer提供了很好的参考。

答案 6 :(得分:0)

当我有类似的问题时,我使用了这种方法。如果未明确指定,则为默认日志级别,并提供覆盖选项。

因此,我在应用程序资源中添加了log4j.properties文件。

log4j.rootLogger=ALL, stdout
...
log4j.appender.stdout.Threshold=INFO
...

,然后为{log4j-.properties中的n添加更多日志配置属性(d n iwe})在调试,信息,警告和错误时定义日志级别。现在,在启动过程中,如果我想覆盖默认值,我将明确提供配置文件。

java ... -Dlog4j.configuration=file:///<path>/log4j-n.properties ...

这将覆盖我在默认log4j.properties中拥有的所有配置。

后来我采用了这种方法。我删除了所有多余的配置文件。在资源中的log4j.properties文件中,我使用了JVM arg占位符:

log4j.appender.stdout.Threshold=${app.log.level}

并将其作为JVM参数提供。

java ... -Dapp.log.level=<LOG-LEVEL> ...

Voila!