应用程序未指向 2.x 指向 1.2
Application not pointing to 2.x pointing to 1.2
升级到 log4j 2.5 后,应用程序仍然指向 log4j 1.2。在下面找到我在服务器启动时收到的 log4j2.xml 文件和警告。
基于以下配置,它应该创建日志文件,但它没有创建。
注意:blow 配置在本地系统中有效,但在我部署到服务器时无效。
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="TRACE">
<Properties>
<Property name="rotateLogsInterval">6</Property>
<Property name="log.dir">D:\Mconnect\LOGGER</Property>
<Property name="log.INVALIDMNO.dir">D:\Mconnect\LOGGER\INVALIDMNO</Property>
<Property name="log.MOBINL1000.dir">D:\Mconnect\LOGGER\MOBINL1000</Property>
<Property name="log.ECONET1000.dir">D:\Mconnect\LOGGER\ECONET1000</Property>
<Property name="log.AIRTEL1000.dir">D:\Mconnect\LOGGER\AIRTEL1000</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p %d [%t] %c: %m%n" />
</Console>
<File name="EIGInformation"
fileName="C:\EIG_SOURCE_CODE\EIG_20140901\logs\EIGInformation1.log">
<PatternLayout>
<Pattern>%5p | %m%n</Pattern>
</PatternLayout>
</File>
<!-- Debug logger -->
<RollingRandomAccessFile name="debugLogger"
fileName="${log.dir}/mconnectDebugLogger.log"
filePattern="${log.dir}/$${date:yyyy-MM}/mconnectDebugLogger-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.dir}" maxDepth="2">
<IfFileName glob="*/mconnectDebugLogger-*.log.gz" /> <IfLastModified age="60d"
/> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Transaction tdr file -->
<RollingRandomAccessFile name="transactionDetails"
fileName="${log.dir}/TDR.log"
filePattern="${log.dir}/$${date:yyyy-MM}/TDR-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %t:: | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.dir}" maxDepth="2">
<IfFileName glob="*/TDR-*.log.gz" /> <IfLastModified age="60d" /> </Delete>
</DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Info General log. -->
<RollingRandomAccessFile name="connectInfoLogGeneral"
fileName="${log.INVALIDMNO.dir}/connectInfoLogGeneral.log"
filePattern="${log.INVALIDMNO.dir}/$${date:yyyy-MM}/connectInfoLogGeneral-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.INVALIDMNO.dir}"
maxDepth="2"> <IfFileName glob="*/connectInfoLogGeneral-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Process log. -->
<RollingRandomAccessFile name="connectProcessLogGeneral"
fileName="${log.INVALIDMNO.dir}/connectProcessLogGeneral.log"
filePattern="${log.INVALIDMNO.dir}/$${date:yyyy-MM}/connectProcessLogGeneral-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.log.INVALIDMNO.dir.dir}"
maxDepth="2"> <IfFileName glob="*/connectProcessLogGeneral-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Info log -->
<RollingRandomAccessFile name="connectInfoLogMOBINL1000"
fileName="${log.MOBINL1000.dir}/connectInfoMOBINL1000.log"
filePattern="${log.MOBINL1000.dir}/$${date:yyyy-MM}/connectInfoMOBINL1000-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.MOBINL1000.dir}"
maxDepth="2"> <IfFileName glob="*/connectInfoMOBINL1000-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Process log -->
<RollingRandomAccessFile name="connectProcessLogMOBINL1000"
fileName="${log.MOBINL1000.dir}/connectProcessMOBINL1000.log"
filePattern="${log.MOBINL1000.dir}/$${date:yyyy-MM}/connectProcessMOBINL1000-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.MOBINL1000.dir}"
maxDepth="2"> <IfFileName glob="*/connectProcessMOBINL1000-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- CXF is used heavily by Mule for web services -->
<AsyncLogger name="org.apache.cxf" level="WARN" />
<!-- Apache Commons tend to make a lot of noise which can clutter the log -->
<AsyncLogger name="org.apache" level="INFO" />
<!-- Reduce startup noise -->
<AsyncLogger name="org.springframework.beans.factory"
level="WARN" />
<!-- Mule classes -->
<AsyncLogger name="org.mule" level="INFO" />
<AsyncLogger name="com.mulesoft" level="INFO" />
<AsyncLogger name="EIGInformation" level="INFO">
<AppenderRef ref="EIGInformation" />
</AsyncLogger>
<AsyncLogger
name="com.comviva.mconnect.webservices.impl.MConnectWebServices"
level="info">
<AppenderRef ref="debugLogger" />
</AsyncLogger>
<AsyncLogger name="transactionDetails" level="OFF">
<AppenderRef ref="debugLogger" />
</AsyncLogger>
<AsyncLogger name="connectInfoLogGeneral" level="INFO">
<AppenderRef ref="connectInfoLogGeneral" />
</AsyncLogger>
<AsyncLogger name="connectProcessLogGeneral" level="INFO">
<AppenderRef ref="connectProcessLogGeneral" />
</AsyncLogger>
<AsyncLogger name="connectInfoLogMOBINL1000" level="INFO">
<AppenderRef ref="connectInfoLogMOBINL1000" />
</AsyncLogger>
<AsyncLogger name="connectProcessLogMOBINL1000" level="INFO">
<AppenderRef ref="connectProcessLogMOBINL1000" />
</AsyncLogger>
<AsyncRoot level="INFO">
<AppenderRef ref="EIGInformation" />
</AsyncRoot>
</Loggers>
</Configuration>
log4j: Using URL [file:/home/contest/prd/muleTomcat/webapps/Connect-1.3.0/WEB-INF/classes/log4j2.xml] for automatic log4j configuration.
log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator
log4j: System property is :null
log4j: Standard DocumentBuilderFactory search succeded.
log4j: DocumentBuilderFactory is: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document is invalid: no grammar found.log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[localhost-startStop-1] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence
问题是旧的 log4j-1.2.x.jar 仍然在类路径中。请将其从类路径中删除并确保以下 jar 位于类路径中:
- log4j-api-2.x.jar
- log4j-核心-2.x.jar
- log4j-1.2-api-2.x.jar - 此适配器会将您的应用程序进行的日志记录调用路由到 Log4j2 实现。
我建议为 2.x 使用最新的 Log4j 版本(撰写本文时为 2.7)。
如果您使用的是 slf4j,请删除 org.slf4j:slf4j-log4j12
(这是针对旧的 Log4j 1)并添加 org.apache.logging.log4j:slf4j-impl
.
升级到 log4j 2.5 后,应用程序仍然指向 log4j 1.2。在下面找到我在服务器启动时收到的 log4j2.xml 文件和警告。 基于以下配置,它应该创建日志文件,但它没有创建。
注意:blow 配置在本地系统中有效,但在我部署到服务器时无效。
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="TRACE">
<Properties>
<Property name="rotateLogsInterval">6</Property>
<Property name="log.dir">D:\Mconnect\LOGGER</Property>
<Property name="log.INVALIDMNO.dir">D:\Mconnect\LOGGER\INVALIDMNO</Property>
<Property name="log.MOBINL1000.dir">D:\Mconnect\LOGGER\MOBINL1000</Property>
<Property name="log.ECONET1000.dir">D:\Mconnect\LOGGER\ECONET1000</Property>
<Property name="log.AIRTEL1000.dir">D:\Mconnect\LOGGER\AIRTEL1000</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p %d [%t] %c: %m%n" />
</Console>
<File name="EIGInformation"
fileName="C:\EIG_SOURCE_CODE\EIG_20140901\logs\EIGInformation1.log">
<PatternLayout>
<Pattern>%5p | %m%n</Pattern>
</PatternLayout>
</File>
<!-- Debug logger -->
<RollingRandomAccessFile name="debugLogger"
fileName="${log.dir}/mconnectDebugLogger.log"
filePattern="${log.dir}/$${date:yyyy-MM}/mconnectDebugLogger-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.dir}" maxDepth="2">
<IfFileName glob="*/mconnectDebugLogger-*.log.gz" /> <IfLastModified age="60d"
/> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Transaction tdr file -->
<RollingRandomAccessFile name="transactionDetails"
fileName="${log.dir}/TDR.log"
filePattern="${log.dir}/$${date:yyyy-MM}/TDR-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %t:: | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.dir}" maxDepth="2">
<IfFileName glob="*/TDR-*.log.gz" /> <IfLastModified age="60d" /> </Delete>
</DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Info General log. -->
<RollingRandomAccessFile name="connectInfoLogGeneral"
fileName="${log.INVALIDMNO.dir}/connectInfoLogGeneral.log"
filePattern="${log.INVALIDMNO.dir}/$${date:yyyy-MM}/connectInfoLogGeneral-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.INVALIDMNO.dir}"
maxDepth="2"> <IfFileName glob="*/connectInfoLogGeneral-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Process log. -->
<RollingRandomAccessFile name="connectProcessLogGeneral"
fileName="${log.INVALIDMNO.dir}/connectProcessLogGeneral.log"
filePattern="${log.INVALIDMNO.dir}/$${date:yyyy-MM}/connectProcessLogGeneral-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.log.INVALIDMNO.dir.dir}"
maxDepth="2"> <IfFileName glob="*/connectProcessLogGeneral-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Info log -->
<RollingRandomAccessFile name="connectInfoLogMOBINL1000"
fileName="${log.MOBINL1000.dir}/connectInfoMOBINL1000.log"
filePattern="${log.MOBINL1000.dir}/$${date:yyyy-MM}/connectInfoMOBINL1000-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.MOBINL1000.dir}"
maxDepth="2"> <IfFileName glob="*/connectInfoMOBINL1000-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
<!-- Connect Process log -->
<RollingRandomAccessFile name="connectProcessLogMOBINL1000"
fileName="${log.MOBINL1000.dir}/connectProcessMOBINL1000.log"
filePattern="${log.MOBINL1000.dir}/$${date:yyyy-MM}/connectProcessMOBINL1000-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%5p | %d | %m%n</Pattern>
</PatternLayout>
<!-- <DefaultRolloverStrategy> <Delete basePath="${log.MOBINL1000.dir}"
maxDepth="2"> <IfFileName glob="*/connectProcessMOBINL1000-*.log.gz" /> <IfLastModified
age="60d" /> </Delete> </DefaultRolloverStrategy> -->
<Policies>
<TimeBasedTriggeringPolicy interval="${rotateLogsInterval}" />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- CXF is used heavily by Mule for web services -->
<AsyncLogger name="org.apache.cxf" level="WARN" />
<!-- Apache Commons tend to make a lot of noise which can clutter the log -->
<AsyncLogger name="org.apache" level="INFO" />
<!-- Reduce startup noise -->
<AsyncLogger name="org.springframework.beans.factory"
level="WARN" />
<!-- Mule classes -->
<AsyncLogger name="org.mule" level="INFO" />
<AsyncLogger name="com.mulesoft" level="INFO" />
<AsyncLogger name="EIGInformation" level="INFO">
<AppenderRef ref="EIGInformation" />
</AsyncLogger>
<AsyncLogger
name="com.comviva.mconnect.webservices.impl.MConnectWebServices"
level="info">
<AppenderRef ref="debugLogger" />
</AsyncLogger>
<AsyncLogger name="transactionDetails" level="OFF">
<AppenderRef ref="debugLogger" />
</AsyncLogger>
<AsyncLogger name="connectInfoLogGeneral" level="INFO">
<AppenderRef ref="connectInfoLogGeneral" />
</AsyncLogger>
<AsyncLogger name="connectProcessLogGeneral" level="INFO">
<AppenderRef ref="connectProcessLogGeneral" />
</AsyncLogger>
<AsyncLogger name="connectInfoLogMOBINL1000" level="INFO">
<AppenderRef ref="connectInfoLogMOBINL1000" />
</AsyncLogger>
<AsyncLogger name="connectProcessLogMOBINL1000" level="INFO">
<AppenderRef ref="connectProcessLogMOBINL1000" />
</AsyncLogger>
<AsyncRoot level="INFO">
<AppenderRef ref="EIGInformation" />
</AsyncRoot>
</Loggers>
</Configuration>
log4j: Using URL [file:/home/contest/prd/muleTomcat/webapps/Connect-1.3.0/WEB-INF/classes/log4j2.xml] for automatic log4j configuration.
log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator
log4j: System property is :null
log4j: Standard DocumentBuilderFactory search succeded.
log4j: DocumentBuilderFactory is: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document is invalid: no grammar found.log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[localhost-startStop-1] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence
问题是旧的 log4j-1.2.x.jar 仍然在类路径中。请将其从类路径中删除并确保以下 jar 位于类路径中:
- log4j-api-2.x.jar
- log4j-核心-2.x.jar
- log4j-1.2-api-2.x.jar - 此适配器会将您的应用程序进行的日志记录调用路由到 Log4j2 实现。
我建议为 2.x 使用最新的 Log4j 版本(撰写本文时为 2.7)。
如果您使用的是 slf4j,请删除 org.slf4j:slf4j-log4j12
(这是针对旧的 Log4j 1)并添加 org.apache.logging.log4j:slf4j-impl
.