2009-08-12 59 views
71

我已經把log4jConfigLocation在web.xml,但我仍然得到以下警告:的log4j:警告沒有附加目的地可以用於記錄發現在web.xml

log4j:WARN No appenders could be found for logger ⤦ 
    ⤥ (org.springframework.web.context.ContextLoader). 
log4j:WARN Please initialize the log4j system properly. 

我錯過了什麼?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/applicationContext.xml 
     </param-value> 
    </context-param> 
    <context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/log4j.properties</param-value> 
    </context-param> 

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

    <servlet> 
     <servlet-name>suara2</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>suara2</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

參見問題[否追加程序可以爲記錄器(log4j的)可以找到?](http://stackoverflow.com/questions/12532339/no-appenders-could-be- found-for-loggerlog4j#) – PJTraill 2016-06-15 17:24:15

回答

41

如果這是整個log4j.properties文件,它看起來像你從來沒有真正創建一個記錄器。你需要這樣一行:

log4j.rootLogger=debug,A1 
+1

@Kaffiene:似乎是你沒有閱讀完整個問題(在這種情況下,作者對該問題的評論提供了答案所指的信息) 。 @CodeGoat:+1閱讀所有評論。 – 2011-05-19 17:16:21

+0

@FranciscoAlvarado我在類路徑中有'log4j.properties'文件,仍然在控制檯中顯示警告。 – pudaykiran 2014-03-18 08:14:06

7

你會看到這則警告的log4j找不到文件「log4j.properties」或「的log4j.xml」的任何地方。

+2

我確認位置正確。因爲當我將log4j.properties重命名爲其他名稱時,它會給出錯誤 – cometta 2009-08-12 13:37:27

16

當你log4j.properties中不存在的類路徑您可能會得到這個錯誤。

這意味着你必須將log4j.properties進入src文件夾,並設置輸出到bin文件夾,以便在運行時log4j.properties將bin文件夾中讀取和你的錯誤將被輕鬆解決。

+1

我在桌面應用程序(Applet)中遇到同樣的問題。文件log4j.properties已經在src文件夾中。如何「將輸出設置到bin文件夾」? – 2015-11-16 16:27:52

24

我在類路徑的正確位置有log4j.properties,並且仍然使用任何直接使用它的警告。由於某些原因,通過commons-logging使用log4j的代碼似乎很好。

如果您有:

log4j.rootLogger=WARN 

將其更改爲:

log4j.rootLogger=WARN, console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n 

根據http://logging.apache.org/log4j/1.2/manual.html

根logger是匿名的,但可以用Logger.getRootLogger訪問() 方法。沒有默認的appender連接到root。

這是什麼意思是你需要指定一些appender,任何appender到根記錄器來記錄發生。

添加控制檯 appender到rootLogger獲取此投訴消失。

+1

我在哪裏可以粘貼這個。 – pudaykiran 2014-03-18 08:15:21

+0

@udaykiranpulipati你可以將它粘貼到log4j.properties中。如果你沒有log4j.properties在src/main/resources /中創建它,如果使用SBT/Gradle/Maven /等。否則,將它放在類路徑根目錄的地方(也許在src /中)。 – 2014-03-20 18:16:00

4

如果仍然有幫助,請驗證歸檔文件的名稱,它必須是「log4j.properties」或「log4j.xml」(區分大小寫),並遵循「Alain O'Dea」的提示。 我geting相同的錯誤,但在做出這些更改後,everthing正常工作。 就像一個魅力:-)。 希望這有助於。

7

或者,您可能正在做我所做的事情,並在加載日誌配置文件之前定義日誌記錄器。這就像他們所說的那樣:「把車放在馬前。」

在代碼:

public static Logger logger = Logger.getLogger("RbReport"); 

... 後來

PropertyConfigurator.configure(l4j); 
logger = Logger.getLogger("RbReport"); 

修復是配置加載後初始化記錄器。

對於極客來說,它是「放笛卡爾b4 d馬」。

3

就我而言,解決方案非常簡單。您不需要在web.xml中聲明任何內容。

因爲您的項目是一個Web應用程序,所以在部署之後,配置文件應在WEB-INF/classes之上。 我建議你創建一個Java資源文件夾(src/main/resources)來做到這一點(最好的實踐)。另一種方法是將配置文件放入您的src/main/java

小心配置文件名。如果您使用XML,則文件名爲log4j.xml,否則log4j.properties

5

如果要爲獨立log4j應用程序進行配置,可以使用BasicConfigurator。這個解決方案對於像Spring這樣的Web應用程序來說並不好。

您需要爲寫

BasicConfigurator.configure(); 

ServletContext sc = config.getServletContext(); 
String log4jLocation = config.getInitParameter("log4j-properties-location"); 
String webAppPath = sc.getRealPath("/"); 
String log4jProp = webAppPath + log4jLocation; 
PropertyConfigurator.configure(log4jProp); 
2

把這些線在web.xml

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

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

年初看到這個鏈接,更詳細:http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

+0

您不需要指定log4jConfigLocation。它將從類路徑中獲取。 – Krishna 2014-04-22 07:24:56

+0

我試過了,但沒有奏效。 – MariemJab 2014-04-22 11:19:00

+0

你有沒有在class文件夾裏面加入xml文件? – Krishna 2014-04-23 06:29:42

0

我有同樣的問題。相同的配置設置和相同的警告消息。對我有效的是: 更改條目的順序。

  • 我把條目日誌配置[背景PARAM和 聽衆]上的文件[爲 applicationContext.xml中的條目之前]頂部和它的工作。

訂單很重要,我猜。

1

好的,我看到很多答案和一些非常正確的。但是,沒有解決我的問題。在我的情況下,問題是UNIX文件系統權限具有我在根服務器上編輯的log4j.properties文件。並且只能由root讀取。但是,我正在部署的Web應用程序對於tomcat無法讀取文件,因爲默認情況下,tomcat在Linux系統上以用戶tomcat身份運行。希望這可以幫助。所以解決方案是在log4j.properties文件所在的目錄中輸入'chown tomcat:tomcat log4j.properties'。

-3

您可以在XML文件中

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC 
"-//SPRING//DTD BEAN 2.0//EN" 
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 

加入這一行,並確保XML文件是src文件夾下

0

添加log4jExposeWebAppRoot - >在web.xml假。它與我:)

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>path/log4j.properties</param-value> 
</context-param> 
<context-param> 
    <param-name>log4jExposeWebAppRoot</param-name> 
    <param-value>false</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 
相關問題