我致力于改进日志记录并面临这样的问题。在我们的项目中,有很多独立项目使用具有通用配置和库的通用项目构建。对于使用 log4j 1.2.15 进行日志记录,并且在每个独立使用的 log4j init bean 中,根据环境名称加载环境特定配置:
<bean id="log4jConfigurer-bean" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.springframework.util.Log4jConfigurer"/>
<property name="targetMethod" value="initLogging"/>
<property name="arguments">
<list>
<value>classpath:config/env/log4j-${env.name}.xml</value>
</list>
</property>
</bean>
(我们只是在我们的目录中从 log4j.{env.name}.xml 制作配置文件名)。
在某些情况下,我们的公共库被其他项目使用(我们假设可以被其他项目使用),我们真的不知道如何调用环境。在这种情况下,当 var ${env.name} 为我们提供一些未知名称时,当然没有用于登录我们的配置目录的配置文件。
那么,如果找不到文件 config/env/log4j-${env.name}.xml 加载一些默认配置文件,我该怎么做呢?我们不仅在谈论这种环境特定配置的实现方式(使用 spring bean 级别),而且还可以将 log4j 升级到版本 2 或切换到具有类似功能的其他记录器,以防其配置可以实现环境特定负载配置级别(可能是某种配置继承)?
可能是我没有使用 log4j 配置的所有功能,我可以使用连接到环境变量的一些逻辑在一个配置文件中创建环境特定的附加程序?任何变体和想法?