2013-05-02 148 views
18

我試圖使用Log4j2將彈簧日誌打印到文件和控制檯中。我想這是我的Log4j2配置中的一個問題。我一直無法工作。我有這個配置在我log4j2.xml文件:使用Log4j2記錄彈簧

<?xml version="1.0" encoding="UTF-8"?> 
<configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="5"> 
    <properties> 
     <property name="patternlayout">%d{ISO8601} [%t] %-5level %logger{36} - %msg%n%throwable{full}</property> 
     <property name="filename">${env:MY_ROOT}/logs/mylog.log</property> 
     <property name="filenamePattern">${env:MY_ROOT}/logs/mylog-%d{yyyy-dd-MM}-%i.log.gz</property> 
    </properties> 
    <appenders> 
     <appender name="Console" type="Console" target="SYSTEM_OUT"> 
      <layout type="PatternLayout" pattern="${patternlayout}" /> 
     </appender> 
     <appender name="File" type="RollingFile" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" 
     append="true"> 
      <layout type="PatternLayout" pattern="${patternlayout}" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="50 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="30" /> 
     </appender> 
     <appender name="AsynchFile" type="asynch" blocking="true" bufferSize="128"> 
      <appender-ref ref="File" /> 
     </appender> 
    </appenders> 
    <loggers> 
     <root level="info"> 
      <appender-ref ref="Console" /> 
      <appender-ref ref="AsynchFile" /> 
     </root> 
     <logger name="org.springframework.beans"> 
      <appender-ref ref="Console" /> 
      <appender-ref ref="AsynchFile" /> 
     </logger> 
    </loggers> 
</configuration> 

這些是我在我的POM文件的依賴關係:(可能有些人不要求)

<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-api</artifactId> 
<version>1.6.6</version> 
</dependency> 

<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-log4j12</artifactId> 
<version>1.6.6</version> 
</dependency> 

<dependency> 
<groupId>org.apache.logging.log4j</groupId> 
<artifactId>log4j-api</artifactId> 
<version>2.0-beta5</version> 
</dependency> 

<dependency> 
<groupId>org.apache.logging.log4j</groupId> 
<artifactId>log4j-core</artifactId> 
<version>2.0-beta5</version> 
</dependency> 
<dependency> 
<groupId>org.apache.logging.log4j</groupId> 
<artifactId>log4j-1.2-api</artifactId> 
<version>2.0-beta5</version> 
</dependency> 

<dependency> 
<groupId>com.lmax</groupId> 
<artifactId>disruptor</artifactId> 
<version>3.0.0.beta3</version> 
</dependency> 

我不是在我的Java代碼中做與spring有關的任何事情。我使用Apache Camel的Main類讀取我的spring配置並加載bean。

我在做什麼錯?謝謝!

編輯:我沒有得到任何輸出(控制檯或文件)的彈簧日誌。但是,我能夠獲取我在java代碼中創建的日誌。我希望這個澄清會有所幫助。

回答

15

看看你的pom中的依賴關係,你有這個:slf4j-log4j12。這會導致針對slf4j api的日誌語句被路由到Log4j-1.2實現。你可能希望這些被路由到Log4j-2.0實現。 你能用log4j-slf4j-impl替換slf4j-log4j12並重試嗎?

+0

我已更新我的文章,以便您可以獲得有關我的問題的更多信息。感謝您的幫助。 – hveiga 2013-05-03 15:54:25

+0

我直到今天才看到你回答,對不起!我要測試它,我會讓你知道。謝謝你的答案。 – hveiga 2013-05-13 22:09:14

+1

幾個月後,但它工作!再次感謝。 – hveiga 2013-06-19 19:55:12

19

這個問題通過彈簧使用普通的日誌記錄1.X引起的,所以,如果你想擁有這個記錄發送到Log4j的2,你需要在你的pom.xml添加依賴

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-jcl</artifactId> 
    <version>2.1</version> 
</dependency> 

請不要拆除common-logging 1.X依賴關係

+3

您可能想要添加log4j-jcl版本需要與所使用的log4j2版本匹配,否則會出現類不匹配問題。 – 2016-03-03 07:22:21

+0

這解決了我的彈簧日誌記錄問題。謝謝! – 2017-11-10 19:46:28