首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Log4j 在 Java Web 專案中的完整整合指南

     編輯:Java 綜合教學

前言

日誌是排查錯誤、追蹤運行參數的利器。雖可用 System.out.println(),但日誌框架提供分級、格式化、多輸出目的地等專業能力。本文示範在無 Spring 的傳統 Java Web 專案中整合 Log4j(Properties 配置 + Servlet 初始化)。

一、Log4j 配置文件 (log4j.properties)

### 根日誌級別與輸出端 ###
log4j.rootLogger = info, stdout, D

### 指定包級別 ###
log4j.logger.com.mucfc = error

### 控制台輸出 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 每日滾動文件輸出 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://logs/log.log
log4j.appender.D.Append = false
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

關鍵點:根級別 info,com.mucfc 包單獨設為 error;兩輸出端(控制台 + 文件),文件端閾值 DEBUG 可捕獲所有級別。

二、Servlet 初始化 Log4j

public class Log4JInitServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        String log4jLocation = config.getInitParameter("log4j-properties-location");
        ServletContext sc = config.getServletContext();

        if (log4jLocation == null) {
            BasicConfigurator.configure(); // 預設配置
            return;
        }

        String webAppPath = sc.getRealPath("/");
        String log4jProp = webAppPath + log4jLocation;
        File file = new File(log4jProp);

        if (file.exists()) {
            PropertyConfigurator.configure(log4jProp); // 載入指定配置
        } else {
            BasicConfigurator.configure();
        }
        super.init(config);
    }
}

三、web.xml 註冊 Servlet(啟動順序 1)

<servlet>
  <servlet-name>Log4JInitServlet</servlet-name>
  <servlet-class>com.mucfc.Log4JInitServlet</servlet-class>
  <init-param>
    <param-name>log4j-properties-location</param-name>
    <param-value>log4j.properties</param-value> <!-- 放在 WebContent 根目錄 -->
  </init-param>
  <load-on-startup>1</load-on-startup> <!-- 專案啟動最先載入 -->
</servlet>

四、業務代碼中使用

public class MyFirstTest extends HttpServlet {
    private static final Logger logger = Logger.getLogger(MyFirstTest.class);

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        logger.info("this is my info message");
        logger.debug("this is my debug message");
        logger.warn("this is my warn message");
        logger.error("this is my error message");
    }
}

根據配置,控制台將輸出 info、warn、error 三級;文件因 Threshold=DEBUG 將記錄所有級別。

五、下一步預告

下篇將介紹 Spring + Log4j 整合,利用 Log4jConfigListener 或 Spring Boot 自動配置進一步簡化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved