簡體   English   中英

log4j-Logger未寫入日志文件

[英]log4j-Logger not writing to log-file

對於我的netbeans Java Web應用程序,我想使用記錄器進行調試。 為此,我在我的庫中包含了log4j-1.2.16.jar:

在此處輸入圖片說明

在文件夾“ Source Packages”中,我創建了一個名為“ Logging”的文件夾。 在此文件夾中,放入以下servlet(在啟動應用程序時初始化記錄器):

包日志記錄;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;

public class InitLog4j extends HttpServlet {

   public void init() {
        String initPath = getInitParameter("logPath");
        String logPath = "/WEB-INF/logs/error.log";
        if (initPath != null) logPath = initPath;
        FileAppender appender = getAppender(logPath);
        if (appender == null) return;
        initLogger(null, appender, Level.INFO);
  }

  private FileAppender getAppender(String fileName) {
    RollingFileAppender appender = null;
    try {
      appender = new RollingFileAppender(
          new PatternLayout("%-5p %c %t%n%29d - %m%n"),
          getServletContext().getRealPath(fileName),
          true);
      appender.setMaxBackupIndex(5);
      appender.setMaxFileSize("1MB");
    } catch (IOException ex) {
      System.out.println(
          "Could not create appender for " 
          + fileName + ":"
          + ex.getMessage());
    }
    return appender;
  }

  private void initLogger(String name, 
                          FileAppender appender, 
                          Level level) 
  {
    Logger logger;
    if (name == null) {
      logger = Logger.getRootLogger();
    } else {
      logger = Logger.getLogger(name);
    }
    logger.setLevel(level);
    logger.addAppender(appender);
    logger.info("Starting " + logger.getName());
  }


}

在我的web.xnl文件中,包括以下幾行:

在此處輸入圖片說明

最后,我創建了一個日志文件(位於WEB-INF文件夾內的logs文件夾內):

在此處輸入圖片說明

然后,我在“ controller”類中創建了一個記錄器。 該記錄器應該將一條文本消息寫入文件error.log:

在此處輸入圖片說明

但是,當我運行該應用程序(創建一個http請求,該請求(如您從上圖所示)應該觸發記錄程序)時,沒有任何內容寫入error.log文件。 和以前一樣空。

為什么我的記錄器未寫入日志文件?

****************************** UPDATE ******************* ******************

無法將jar文件添加到lib文件夾:

在此處輸入圖片說明

僅將它們添加到Libraries文件夾中是可行的:

在此處輸入圖片說明

(It works, but it's not the best) (有效,但這不是最好的方法)

  • 如果只想記錄該應用程序,則將log4j.jarlog4j.properties放入WEB-INF/lib 您不能將.jar文件放在WEB-INF /classes 這是為.class文件保留的。

    • files have to be in the lib directory for the classloader to pick it up. log4j.jarlog4j.properties文件必須由相同的類加載器加載,因此文件都必須位於lib目錄中,以使類加載器能夠將其加載。
  • 或者,如果要對項目中的所有應用程序使用相同的日志配置,則可以將這兩個文件移至Tomcat/lib目錄。

將非jar文件放在lib目錄中不是一個好習慣。 log4j.properties是一個配置文件。 我們可以改為執行以下操作:

  1. 與之前一樣,將log4j.jar保留在“ WEB-INF / lib”目錄中。
  2. 然后將log4j.properties放在conf目錄(“ Tomcat / conf”或“ WEB-INF / conf”)中。
  3. 然后,在使用記錄器的每個類中,您都可以這樣做:ClassThatUsesLogger.class.getClassLoader()。getResourceAsStream(“ conf / log4j.properties”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM