2013-03-08 25 views
1

我想在我的Java EE項目中添加Log4j。我已經將log4j.jar文件添加到我的WEB-INF/lib文件夾中,並嘗試在我的項目中的一個Servlet中實現log4j。Java Web應用程序中的Log4j錯誤

最初我通過使用log4j和基本配置(不使用log4j.properties文件)來試用它。

我的servlet

import org.apache.log4j.*; 

public class classname extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static Logger log = Logger.getLogger(classname.class); 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

BasicConfigurator.configure(); 

log.debug("************************Test Message from Log4j*****************************"); 

我想這不log4j.properties文件,但我得到了如下的錯誤:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

我測試了另一個Java應用程序相同的(而不是web)它的基本配置工作正常。

我需要在我的web項目中添加什麼東西嗎?

+0

ü可以顯示網頁。xml文件 – PSR 2013-03-08 13:19:13

+0

我還沒有在web.xml中添加任何東西。我應該在Web.xml文件 – Cyber 2013-03-08 13:23:30

+0

中添加什麼,你需要創建一個log4j.xml也 – PSR 2013-03-08 13:25:29

回答

0

所有這些都是warnings.To避免這些警告

配置log4j的在web.xml中第一place.I認爲你在wex.xml的某些部分進行配置。

如果您在頂部配置log4j,則可以避免這些警告。

0

在加載Axis時,log4j使用默認搜索方法來查找log4j.properties,但它沒有找到它。這將始終導致該警告。我希望類路徑上的每個spe4 log4j實現都會發生同樣的情況。它取決於哪個類加載器正在處理Axis的加載,以確定它將在哪裏查找並查找屬性文件。

0

您不必在web.xml中聲明任何內容。

由於您的項目是一個Web應用程序,配置文件應該在部署後放在WEB-INF/classes上。我建議你創建一個java資源文件夾來做到這一點。另一種方法是將配置文件放在src/main/java中。

請注意配置名稱文件。如果使用xml,則文件名是log4j.xml,否則是log4j.properties。

0

編寫一個實現ServletContextListener的自定義類,如下所示。 該類將查找在web.xml中定義的名爲log4jFileName的上下文參數。 這找到了log4j XML配置文件。這將在其他類使用它之前配置log4j。

Custom listener: 

public class StartupListener implements ServletContextListener 
{ 
    @Override 
    public void contextDestroyed(ServletContextEvent arg0) 
    { 
     // Cleanup code goes here 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent sce) 
    { 
     Logger logger = null; 
     ServletContext servletContext = sce.getServletContext(); 
     String log4jFile = servletContext.getInitParameter("log4jFileName"); 
     DOMConfigurator.configure(log4jFile); 
     logger = LogManager.getLogger(StartupListener.class.getName()); 
     logger.debug("Loaded: " + log4jFile); 
    } 
} 
  1. 在web.xml定義監聽器和上下文PARAM像這樣

    <context-param> 
        <param-name>log4jFileName</param-name> 
        <param-value>app/log4j/config/log4jConfig.xml</param-value> 
    </context-param> 
    <listener> 
        <listener-class> 
         com.yourpackage.YourListener 
        </listener-class> 
    </listener> 
    
  2. 現在正確地配置您的log4jConfig.xml以確保您的應用程序日誌的下一個適當的記錄路徑。使用像RollingFileAppender這樣的文件appender來處理您的應用程序的保留策略。

下面是一個簡單的log4j XML來幫助你

Sample log4j XML: (Customize as necessary) 

<?xml version="1.0" encoding="UTF-8"?> 
<log4j:configuration xmlns:log4j = "http://jakarta.apache.org/log4j/" debug = "false"> 
    <appender name = "FILE" class = "org.apache.log4j.RollingFileAppender"> 
     <param name = "File" value = "/usr/local/path/to/application.log"/> 
     <param name = "MaxFileSize" value = "5MB"/> 
     <param name = "MaxBackupIndex" value = "50"/> 
     <layout class = "org.apache.log4j.PatternLayout"> 
      <param name = "ConversionPattern" value = "[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n"/> 
     </layout> 
    </appender> 
    <category name = "com.your.application.package"> 
     <priority value = "debug"/> 
    </category> 
    <category name = "org.apache.catalina"> 
     <priority value = "error"/> 
    </category> 
    <category name = "org.hibernate"> 
     <priority value = "error"/> 
    </category> 
    <root> 
     <priority value = "info"/> 
     <appender-ref ref = "FILE"/> 
    </root> 
</log4j:configuration>