以前我们有一个log4j 1.x兼容的xml格式,它配置了这个滚动文件附加器-
<appender name="ALL" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.base}/logs/trw.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="4096KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%t] %C{1}:%L - %m%n" />
</layout>
</appender>
现在我已经将它更改为新的log4j2.xml格式,根据我的研究, Catalina .base将变成这样-
<RollingFile name="ALL" fileName="${sys:catalina.base}/logs/trw.log"
filePattern="${sys:catalina.base}/logs/trw_%i.log"
append ="true">
<PatternLayout pattern="%d %p [%t] %c{1}:%L - %m%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="4096KB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
但是当我运行一个使用这个日志配置的测试文件时,xml文件被找到并加载,一切都很顺利,但是它没有找到系统变量cataline.base,而是创建了一个文件夹${sys: Catalina .base},并将日志放在它下面。我的问题是-这是预期的行为吗?log4j2.xml config是否尝试搜索系统属性,如果没有找到,就创建一个同名的文件夹?这个配置位于一个运行在TomCat 7、spring 3.1和servlet 2.5上的Web应用程序中。日志按预期生成,但似乎只有文件夹名称有问题。
1条答案
按热度按时间8yparm6h1#
通过this答案找到了问题的核心。
在log4j2中使用
${sys:catalina.base}
运行测试时也有同样的问题。第一个问题是你的应用在Tomcat中运行,而你的测试在Tomcat之外运行。Tomcat本身在启动时从
CATALINA_BASE
设置变量catalina.base
,所以测试的log4j2示例不知道catalina.base
这样的变量。我在我的案例中解决的第二个问题是,我把
export CATALINA_BASE="/path/to/catalina/location"
放入.bashrc
而不是.profile
。解决方案
1.将绝对路径设置为(例如,如果您的 Catalina 位于某个用户目录中)
"/home/${env:USER}/path/to/cataina/location"
或
1.将
export CATALINA_BASE="/path/to/catalina/location"
放入.profile
中,然后就可以像${env:CATALINA_BASE}
那样设置log4j2属性。