我致力于改进日志并面对这样的问题。在我们的项目中,有许多独立使用一个具有常见配置和库的共同项目构建。对于使用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>
(我们只是从我们的dirs中的log4j。{env.name} .xml创建配置文件名)。
在某些情况下,我们常用的lib被其他项目使用(我们认为可以被其他项目使用)我们真的不知道如何调用环境。在这种情况下,当var $ {env.name}为我们提供一些未知名称时,我们的配置目录中没有用于登录的配置文件。
那么如果找不到文件config / env / log4j - $ {env.name} .xml加载一些默认配置文件,我该如何才能实现?我们不仅仅讨论环境特定配置的实现方式(使用spring bean级别),但是如果其配置可以实现环境特定负载,也可以将log4j升级到版本2或切换到具有类似功能的其他记录器。配置级别(可能是某种配置无效)?
可能我只是没有使用log4j配置的所有功能,我可以使用连接到环境变量的一些逻辑在一个配置文件中创建环境特定的appender?任何变体和想法?
答案 0 :(得分:1)
没有“开箱即用”的解决方案。
不是使用MethodInvokingFactoryBean
,而是创建自己的bean来验证参数,然后调用Log4jConfigurer.initLogging()
。
或者,将这个新bean传递给配置列表并让它依次尝试。