当前位置: 首页 > 知识库问答 >
问题:

在log4j包级属性中使用环境变量?

郑声
2023-03-14

我正在使用log4j管理Clojure应用程序中的日志记录。我希望能够使用系统变量为log4j中的单个包设置日志级别。属性文件。例如,下面是我的基本属性文件:

log4j.rootLogger=INFO,console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=DEBUG

这将日志级别设置为company.logging.logger中的DEBUG(特定日志代码所在的位置)。然而,我不希望这样——我希望它在本地是调试的,在生产上是信息的。所以,我使用一个环境变量:

log4j.rootLogger=INFO,console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=${env:LOG_LEVEL}

这个实例中的LOG_LEVEL设置为DEBUG,我可以通过使用环境变量将root日志级别设置为DEBUG来确认它是否可以正常工作。

所以,例如:

log4j.rootLogger=${env:LOG_LEVEL},console,sentry
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ} %-5p [%t] %-4r %c %x - %m%n

log4j.logger.company.logging.logger=${env:LOG_LEVEL}

这会将整个应用程序的日志记录级别设置为DEBUG。这是不可取的:它使应用程序日志过于冗长以至于无法使用。

是否可以使用环境变量在log4j中设置单个包的日志级别?这是L4J生态系统中的错误吗?或者这是有意的行为,我们应该有不同的方法来解决这个问题?

共有1个答案

咸弘雅
2023-03-14

因为您使用的是Lo4j 1。在x API中,您可以通过编程将一个或多个Java包的日志级别设置为从环境变量获得的值,您将在开发期间将该值设置为默认值,并在生产中设置为不同的值

看见https://stackoverflow.com/a/4598829/483566有关如何实现此功能的示例。此链接中的一条评论建议如下:

LogManager.getLogger(Class.forName("org.hibernate.util.JDBCExceptionReporter")).setLevel(Level.FATAL);

... 这应该很容易翻译成Clojure。

注意:您似乎正在使用Logj 1. x,这是报废。您应该使用Log4j2或类似tools.logging.

 类似资料:
  • 问题内容: 我想这样做: 注意这一行: 我试图设置这样的值: 但我看不到任何效果。 在调用方法之前是否已配置log4j ? 还有其他方法吗? 问题答案: 看来您做对了所有事情。我认为在主类中设置属性与通过命令行指定属性之间没有任何区别,只要它发生在实际的log4j初始化之前即可。 我认为您的问题是 在 指定属性 之前已 加载日志记录框架。我可以说在调用配置器时将配置日志记录框架(log4j)。这样

  • 问题内容: 是否可以在log4j xml配置文件中引用系统环境变量(与Java系统属性相反)? 我希望能够执行以下操作: 并使其从系统环境变量中获取,因此我可以避免必须通过-D参数传递太多内容。 问题答案: 仅在log4j 2.X中记录了此语法,因此请确保使用正确的版本。它不适用于1.X版本。

  • 问题内容: 我一直在阅读官方文档,但无法找到有关环境变量的任何信息。显然,有一些社区项目支持环境变量,但这对我来说可能是过大了。所以我想知道在使用Vue CLI创建的项目上是否有一些简单的开箱即用的功能可以正常工作。 例如,我可以看到,如果执行以下操作,则会打印出正确的环境,这意味着已经设置好了吗? 我对环境变量和Node有点陌生。 仅供参考,使用Vue CLI 3.0 beta版。 问题答案:

  • 最佳实践最好在values.yaml文件中定义环境变量还是在templates/deployment.yaml放入中定义环境变量? 如果有您使用的示例应用程序,您能提供帮助吗?

  • 问题内容: JVM中的系统属性System.getProperties()和环境变量System.getenv()有什么区别? 问题答案: 我认为两者之间的区别归结为访问。系统环境变量可以由任何进程访问,而Java系统属性只能由添加到它们的进程访问。 另外,正如Bohemian所说,env变量是在OS中设置的(但是可以通过Java设置),而系统属性则作为命令行选项传递或通过设置setPropert

  • 我正在运行一个springboot应用程序,它需要信任我在本地信任库中添加的证书。现在我将它设置在intellij中的运行配置选项下,它有效。ex- 我想知道有没有办法从应用程序设置它。以我们设置spring属性的方式在springboot中创建属性文件?