2015-02-11 138 views
9

我想用log4j2配置tomcat 7內部日誌記錄。我遵循Logging server classes in Tomcat 6 with log4j2提供的答案。tomcat 7內部日誌記錄與log4j2.xml

我使用的是tomcat 7.0.54和log4j-core-2.1.jar,log4j-api-2.1.jar。 我已經下加載的演員,做了以下所有步驟,但是當我啓動tomcat,我得到一個錯誤:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

這是我執行的步驟:

  • log4j2.xml$CATALINA_BASE/lib
  • 從 「額外」
  • 下載tomcat-juli.jartomcat-juli-adapters.jar
  • log4j-api-2.1.jarlog4j-core-2.1.jarlog4j-jul-2.1.jartomcat-juli-adapters.jar從「額外」轉換爲$CATALINA_HOME/lib
  • 替換$CATALINA_HOME/bin/tomcat-juli.jartomcat-juli.jar從「額外」。
  • 刪除$CATALINA_BASE/conf/logging.properties
  • 設置日誌管理器使用管理器從log4j2-jul橋(log4j-jul-2.1.jar)。改變catalina.sh確保類路徑包括bin/tomcat-juli.jarlib/log4j-jul-2.1.jarlib/log4j-api-2.1.jarlib/log4j-core-2.1.jar,以及用來啓動Tomcat的命令包括 -Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager`

我甚至嘗試在catalina.sh中加入這個(LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/lib/log4j2.xml"),但沒有奏效。

請讓我知道是否有人可以成功配置它。

回答

4

我的錯誤,我需要包括$CATALINA_BASE/lib在類路徑log4j2.xml被拿起。

+0

爲什麼您必須在您的類路徑中添加$ CATALINA_BASE/lib?根據文檔,$ CATALINA_BASE/lib或$ CATALINA_BASE/bin中的庫應該優先於$ CATALINA_HOME/lib或$ CATALINA_HOME/bin中的庫。所以,不應該在類路徑中添加任何內容,根據$ CATALINA_BASE的定義,類路徑應該被正確構建。 這就是說,我有與Tomcat 8相同的問題。我收到以下錯誤: 無法加載Logmanager「org.apache.logging.log4j.jul.LogManager」 java.lang.ClassNotFoundException:.. 。 – Achille 2015-10-18 22:27:03

+1

實際上,如果你的配置文件是$ {CATALINA_BASE},那麼你可以定義log4j的LOGGING_CONFIG變量來代替設置CLASSPATH:LOGGING_CONFIG =「 - Dlog4j.configurationFile = $ {CATALINA_BASE} /conf/log4j2.xml」 /conf/log4j2.xml。 – Achille 2015-10-18 23:04:03

7

我採取了以下步驟,它爲我工作。

  1. 將下面的罐子在$ CATALINA_HOME/lib中
    • log4j的2芯(log4j的核 - 2.4.1.jar)
    • log4j的2 API(log4j的-API-2.4.1.jar )
    • log4j的2橋LOG4Ĵ1.0(log4j的-1.2-API-2.4.1.jar)從Tomcat額外
    • Tomcat的巨力-adapters.jar
  2. 替換現有$克特林A_HOME /斌/ Tomcat的juli.jar從Tomcat的演員是tomcat-juli.jar
  3. 刪除文件$ CATALINA_HOME/conf目錄/ logging.properties
  4. 將在$新的log4j 2配置文件(log4j2.xml) CATALINA_HOME/lib

訣竅是遵循官方tomcat 7 documentation來設置log4J 1.X,而是改爲使用log4j2工件。此解決方案也不需要$ CATALINA_HOME/bin/catalina中的任何更改。sh或任何其他文件$ CATALINA_HOME/bin中

+1

完美!我將這些步驟與此log4j2.xml結合使用:https://gist.github.com/bmaupin/475a0cd6e8b374d876f5085846761fb6 – bmaupin 2016-11-08 14:22:40

+0

@bmaupin我需要將所提到的XML文件放在哪裏? – gahse 2017-01-12 04:57:57

+0

@gahse在上面的答案中參見步驟#4 – bmaupin 2017-01-12 13:49:36

0

適應您的安裝如下:

我的Tomcat 8.5.x的是位於/ opt/tomcat的/

1.複製log4j2 jar文件到/ opt/tomcat的/庫/

(對於Windows使用複印件)

2.創建/opt/tomcat/conf/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="OFF"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="LOGJ2 %d [%-6p] %c{1} – %m%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="*" level="trace"> 
      <AppenderRef ref="Console"/> 
     </Logger> 

     <Root level="info"> 
      <appenderRef ref="Console" level="info"/> 
     </Root> 
    </Loggers> 
</Configuration> 

3.創建或編輯/opt/tomcat/bin/setenv.sh或/opt/tomcat/bin/setenv.bat

如果沒有在setenv.sh/bat中設置CLASSPATH,初始Tomcat啓動加載器將無法訪問類org.apache.logging.log4j.jul.LogManager和log4j2類。啓動Tomcat之前設置CLASSPATH運行setenv.sh/bat

#The environment variable CLASSPATH is unset in catalina.sh/catalina.bat 
CLASSPATH=/opt/tomcat/libs/log4j-api-2.9.1.jar:/opt/tomcat/libs/log4j-core-2.9.1.jar:/opt/tomcat/libs/log4j-jul-2.9.1.jar 
JAVA_OPTS=-Dlog4j.configurationFile=/opt/tomcat/conf/log4j2.xml 
LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 

4.查看在/opt/tomcat/log/catalina.out日誌之前不會影響,因爲catalina.sh/bat unsets CLASSPATH初始Tomcat的引導裝載程序並注意log42.xml中的LOGJ2前綴

LOGJ2 2017-10-12 08:47:37,797 [INFO ] VersionLoggerListener – Server built:   Sep 28 2017 10:30:11 UTC 
LOGJ2 2017-10-12 08:47:37,797 [INFO ] VersionLoggerListener – Server number:   8.5.23.0 
LOGJ2 2017-10-12 08:47:37,797 [INFO ] VersionLoggerListener – OS Name:    Linux 
LOGJ2 2017-10-12 08:47:37,797 [INFO ] VersionLoggerListener – OS Version:   4.4.0-93-generic 
LOGJ2 2017-10-12 08:47:37,797 [INFO ] VersionLoggerListener – Architecture:   amd64