我正在使用log4j来管理Clojure应用程序中的日志记录。我希望能够使用系统变量为log4j.properties文件中的单个程序包设置日志级别。因此,例如,这是我的基本属性文件:
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(位于特定的日志记录代码。但是,我不希望这样-我希望它在本地是DEBUG,而在生产(AWS)上是INFO。因此,我使用一个环境变量:
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生态系统中的错误吗?还是这种预期的行为,而我们应该以另一种方式解决此问题?
答案 0 :(得分:0)
由于您使用的是Lo4j 1.x API,因此可以通过编程方式将一个或多个Java包的日志级别设置为从环境变量中获取的值,该值将在开发过程中设置为默认值,并设置为其他值生产中
有关如何实现此操作的示例,请参见https://stackoverflow.com/a/4598829/483566。此链接中的评论之一建议如下:
LogManager.getLogger(Class.forName("org.hibernate.util.JDBCExceptionReporter")).setLevel(Level.FATAL);
...应该很容易翻译成Clojure。
注意:您似乎正在使用停产的Logj1.x。您应该使用Log4j2或类似tools.logging之类的东西。