2010-10-26 63 views
10

在我的應用程序iam中使用Log4j進行日誌記錄。目前我將log4j.xml放在WEB-INF/classes中。 以下是我用來加載log4j.xml文件的配置。從戰爭外部加載Log4j.xml

<!-- language: xml --> 

    <context-param> 
      <param-name>log4jConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/log4j.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

現在我需要將log4j.xml文件放在我的war文件之外。該位置將很可能是JBOSS_HOME/server/default/deploy/settings。在設置目錄中,我需要放置我的log4j.xml。

我試圖通過編輯的run.bat設置的JBoss類路徑加載它如下 組JBOSS_CLASSPATH =%RUN_CLASSPATH%;%JBOSS_HOME%\服務器\默認\部署\設置 和我下面使用在web.xml

<!-- language: xml --> 

    <context-param> 
      <param-name>log4jConfigLocation</param-name> 
      <param-value>classpath:/log4j.xml</param-value> 
    </context-param> 

    <listener> 
      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

但它在部署應用程序時拋出異常。例外是 java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: class path resource [/log4j.xml] cannot be resolved to URL because it does not exist

現在我的問題是我如何加載它。

+1

@ atulkumar-V,耆那教您編輯爆料突出:-( – Betlista 2012-08-17 16:36:53

回答

4

您可以簡單地聲明log4j配置的位置是這樣的:

<context-param> 
     <param-name>log4jConfigLocation</param-name> 
    <param-value>${JBOSS_HOME}/server/default/deploy/settings/log4j.xml</param-value> 
</context-param> 
+0

我不想lo4j.xml BCZ的硬核位置whenver你想改變它的位置,你必須在web.xml中修改它並構建war文件 – Narendra 2010-10-26 14:13:33

+0

這只是一個例子,你可以使用類似於$ {DEPLOY_SETTINGS} /log4j.xml的東西 – 2010-10-26 14:37:57

+0

從哪裏可以得到這個值,我必須將它設置爲系統屬性? – Narendra 2010-10-26 15:42:44

9

記得添加「文件://」的路徑的前面,否則將web應用程序文件夾中搜索。

以下示例適用於我。

<web-app> 
    <context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>file://${MY_ENV_VAR}log4j.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
</web-app> 
+0

Log4JConfigListener的javadoc說:「如果您想保持WAR未展開或不需要WAR目錄中的特定於應用程序的日誌文件,請不要在應用程序內使用log4j安裝程序(因此,請勿使用Log4jConfigListener或Log4jConfigServlet )「。那麼你爲什麼要使用這個課程? – herman 2013-02-19 13:28:43

+2

我只能在'file:'後面有一個'/'而不是兩個''時才能使用它。我希望我的建議可以幫助其他人。 – 2013-07-23 18:34:18

6

我有同樣的例外。

我已經使用這個代碼:

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:log4j.properties</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

當我執行此異常消失:

MVN全新安裝

+1

這個答案的最佳部分是classpath:log4j.properties – Azim 2016-07-14 13:39:00

0

您可以使用:

  • 文件:/// $ {MY_ENV_VAR } /log4j.xml
  • 文件:/// $ {JBOSS_HOME} /server/default/deploy/settings/log4j.xml

在裏面你log4jConfigLocation標籤。

注意補充文件:///如果路徑是絕對的(該web應用文件夾外)

0

您可以在web.xml文件中設置這樣的:

<context-param> 
      <param-name>log4jConfigLocation</param-name> 
      <param-value>file://${JBOSS_HOME}/domain/configuration/log4j.xml</param-value> 
     </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

注意:對於Windows環境,以「file://」之類的雙「/」開頭。對於帶有「/」的sigle「/」的Linux環境。