JavaWeb | log4j2日誌入門——編寫一個簡單的日誌
1. 在專案的開發過程,我們需要使用日誌輸出一些與程式設計相關的資訊以及對系統的操作記錄在日誌檔案中,以達成下面的用途:
*1) 問題追蹤:*通過日誌不僅僅包括我們程式的一些bug,也可以在安裝配置時,通過日誌可以發現問題。
*2) 狀態監控:*通過實時分析日誌,可以監控系統的執行狀態,做到早發現問題、早處理問題。
*3) 安全審計:*審計主要體現在安全上,通過對日誌進行分析,可以發現是否存在非授權的操作
2.在log4j2中, 共有8個級別,按照從低到高為:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
All:最低等級的,用於開啟所有日誌記錄.
Trace:是追蹤,就是程式推進一下.
Debug:指出細粒度資訊事件對除錯應用程式是非常有幫助的.
Info:訊息在粗粒度級別上突出強調應用程式的執行過程.
Warn:輸出警告及warn以下級別的日誌.
Error:輸出錯誤資訊日誌.
Fatal:輸出每個嚴重的錯誤事件將會導致應用程式的退出的日誌.
OFF:最高等級的,用於關閉所有日誌記錄.
3.log4j2.xml簡單的配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<!--日誌級別以及優先順序排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration後面的status,這個用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,你會看到log4j2內部各種詳細輸出-->
<Configuration status="error">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern= "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="e:/logs/mylog.log">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<!-- 日誌級別 -->
<Root level="info">
<!-- 控制檯 -->
<AppenderRef ref="Console"/>
<!-- 磁碟儲存 -->
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
第一個:log4j-api-2.11.1.jar
第二個:log4j-core-2.11.1.jar
第三個:log4j-web-2.11.1.jar
5. 一個簡單的測試案例
建一個servlet,只需要編寫兩行程式碼,就可以測試
private Logger logger= (Logger) LogManager.getRootLogger();
logger.info(“你好,帥哥”);
package com.iflytek.app;
import java.io.IOException;
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.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@WebServlet("/Log4j2Servlet")
public class Log4j2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//日誌記錄器
private Logger logger= (Logger) LogManager.getRootLogger();
public Log4j2Servlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("你好,帥哥");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
除錯結果
1.控制檯
12:26:41.247 [http-bio-8080-exec-3] INFO - 你好,帥哥
2.磁碟檔案
2018-11-17 12:26:41,247 INFO c.i.a.Log4j2Servlet [http-bio-8080-exec-3] 你好,帥哥
6. 在專案中的簡單應用
應用於記錄使用者登入時間,名稱,及一些功能操作。
我們在匯入包和配置好log4j2.xml檔案後, 只需要建立
private Logger logger= (Logger) LogManager.getRootLogger();
然後在呼叫 **logger.日誌級別(“日誌裡所要記錄的資訊”);**特別強調日誌 的級別要與xml配置的日誌級別一致。例如info:
logger.info("你好,帥哥");
logger.info(loginName+"登陸成功");
要想了解更多日誌知識,請檢視log4j 2官網https://logging.apache.org/log4j/2.x/