Java 为什么非根级别的记录器不接收日志记录?
我正在将应用程序从Log4J 1.2.16迁移到Log4J 2.13.3。为此,我使用log4j21.2到2.13.3桥。在我自己的开发机器上,一切都运行得很好。但是,当我将应用程序部署到测试服务器时,日志只发送到根日志记录器,我定义的其他日志文件保持为空 两台机器上的Java 为什么非根级别的记录器不接收日志记录?,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我正在将应用程序从Log4J 1.2.16迁移到Log4J 2.13.3。为此,我使用log4j21.2到2.13.3桥。在我自己的开发机器上,一切都运行得很好。但是,当我将应用程序部署到测试服务器时,日志只发送到根日志记录器,我定义的其他日志文件保持为空 两台机器上的log4j2.xml配置文件完全相同,只是附录中的路径不同。我的开发机器运行Windows,测试服务器运行Linux。该应用程序已部署到Weblogic 12.2.1.3 我已经在下面的测试服务器上包含了log4j2.xml文件(
log4j2.xml
配置文件完全相同,只是附录中的路径不同。我的开发机器运行Windows,测试服务器运行Linux。该应用程序已部署到Weblogic 12.2.1.3
我已经在下面的测试服务器上包含了log4j2.xml
文件(请原谅凌乱的replace语句)。需要明确的是:所有日志都被发送到ERROR_LOG(因为这是根日志中引用的日志),其他三个日志文件被创建,但在测试服务器上保持为空,而它们在我的开发机器上接收数据
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration monitorInterval="60">
<Appenders>
<RollingFile name="ERROR_LOG" fileName="/var/log/weblogic/app/error.log" filePattern="/var/log/weblogic/app/error.log%d{yyyy-MM-dd}.gz">
<PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(<[^/]*?[wW]achtwoord.*?>).*?(</.*?[wWWachtwoord].*?>)}{$1********$2}}{(<pw>).*?(</pw>)}{$1********$2}}{(<newPW>).*?(</newPW>)}{$1********$2}|%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
<RollingFile name="DEBUG_LOG" fileName="/var/log/weblogic/app/debug.log" filePattern="/var/log/weblogic/app/debug.log%d{yyyy-MM-dd}.gz">
<PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(<[^/]*?[pP]assword.*?>).*?(</.*?[pPPassword].*?>)}{$1********$2}}{(<pw>).*?(</pw>)}{$1********$2}}{(<newPW>).*?(</newPW>)}{$1********$2}|%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
<RollingFile name="FACADE_LOG" fileName="/var/log/weblogic/app/facade.log" filePattern="/var/log/weblogic/app/facade.log%d{yyyy-MM-dd}.gz">
<PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(<[^/]*?[pP]assword.*?>).*?(</.*?[pPPassword].*?>)}{$1********$2}}{(<pw>).*?(</pw>)}{$1********$2}}{(<newPW>).*?(</newPW>)}{$1********$2}|%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
<RollingFile name="AUDIT_LOG" fileName="/var/log/weblogic/audit/audit.log" filePattern="/var/log/weblogic/audit/audit.log%d{yyyy-MM-dd}.gz">
<PatternLayout charset="UTF-8" pattern="###%d{yyyy-MM-dd HH:mm:ss,SSS Z}{Europe/Amsterdam}|%d{yyyy-MM-dd HH:mm:ss,SSS Z}{UTC}|%-5p|%t|%c{2}|%replace{%replace{%replace{%m}{(<[^/]*?[pP]assword.*?>).*?(</.*?[pPPasword].*?>)}{$1********$2}}{(<pw>).*?(</pw>)}{$1********$2}}{(<newPW>).*?(</newPW>)}{$1********$2}|%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="nl.test.app.facade" level="debug" additivity="false">
<AppenderRef ref="FACADE_LOG"/>
</Logger>
<Logger name="nl.test.app.auditadapter" level="debug" additivity="false">
<AppenderRef ref="AUDIT_LOG"/>
</Logger>
<Logger name="nl.test.app.proces" level="debug" additivity="false">
<AppenderRef ref="DEBUG_LOG"/>
</Logger>
<Root level="debug">
<AppenderRef ref="ERROR_LOG" />
</Root>
</Loggers>
</Configuration>
在我自己的机器上,我将log4j2.xml
的位置添加到类路径中。在测试服务器上,我尝试将位置添加到类路径,并通过log4j.configurationFile
JavaVM参数进行设置。这两种情况下的结果是相同的:所有日志文件都是在启动时创建的,但只有根记录器(ERROR_LOG)中提到的一个日志文件将日志数据发送给它,其他日志文件保持为空。这告诉我至少Log4J2能够找到并读取配置文件。我尝试过切换根记录器中提到的appender。在这种情况下,日志数据被发送到该文件,所以它似乎与文件系统无关
所以问题是:为什么我的测试服务器上的日志文件保持为空(除了根记录器中提到的日志文件),但在我的开发机器上接收数据?最后,在删除所有工作正常的日志文件后,应用程序工件中仍然有一个不正确的log4j 1.x JAR。在Log4J的调试日志中,您可能会看到一些错误或至少是一条线索,但事实并非如此。再说一遍,类路径问题(我想这是)可能很棘手