我们的团队正在尝试进入 Single Build 状态;发送到 Test 的构建与升级到 Staging->etc->Production 的构建相同。现在为不同的环境设置日志记录有点棘手(目前我们使用 Maven 配置文件并在构建时过滤记录器配置)。
我们有许多 Web 应用程序,我希望日志记录由应用程序定义并由其部署到的环境进行配置。
我们使用 Log4j,尽管我们对可以使其工作的不同实现持开放态度。我们希望应用程序能够定义记录器,因为某些应用程序可能希望在某些包上进行特定的日志记录,但最终,我希望环境能够配置日志记录路径和级别。例如,QA 环境通常可能INFO
在包上具有级别日志记录,com.foo.bar
但如果他们遇到棘手的问题,他们可能希望将其提升到DEBUG
. 我不想重新部署该应用程序,因为这在技术上会更改构建。
通过最少的探索,我发现 log4j 可以直接使用系统属性,所以这样的设置是可能的:
<appender name="someAppender" class="com.whatevs.SomeAppender">
<param name="File" value="${logger.path}/some_app.log"/>
<!-- ... -->
</appender>
<logger name="com.foo.bar">
<level value="${logger.level.com.foo.bar}"></level>
</logger>
<root>
<priority value="${logger.priority}"/>
<appender-ref ref="someAppender"/>
</root>
我担心的是,随着部署的应用程序数量和定义的记录器数量的增加,维护系统属性的开销可能会变得很麻烦:
-Dlogger.path=/var/log -Dlogger.priority=INFO -Dlogger.level.com.foo.bar=WARN ...
我确信这个问题之前已经解决了。最好的方法是什么?