引入依賴
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
日志等級
- fatal 指出每個嚴重的錯誤事件将會導緻應用程式的退出。
- error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運作。
- warn 表明會出現潛在的錯誤情形。
- info 一般和在粗粒度級别上,強調應用程式的運作全程。
- debug 一般用于細粒度級别上,對調試應用程式非常有幫助。預設級别
- trace 是程式追蹤,可以用于輸出程式運作中的變量,顯示執行的流程。
特殊的日志等級
- OFF,可用來關閉日志記錄。
- ALL,啟用所有消息的日志記錄。
注:優先級從高到低為 FATAL > ERROR > WARN > INFO > DEBUG > TRACE
元件
Logger
指定日志的輸出等級
Logger的繼承
一個Log可以繼承另一個Log的屬性(日志等級,appender等),根據Log的命名判斷繼承關系,例如:命名為“com.example.person.Man"的Log就繼承自命名為“com.example.person”的Log的全部屬性,Log4J中存在一個特殊的名為“RootLogger”的Log,是所有Log的根。
Appender
指定日志的輸出方式(輸出到控制台、檔案,資料庫等)
常用的Appender有以下幾種:
輸出端類型 | 作用 |
---|---|
ConsoleAppender | 将日志輸出到控制台 |
FileAppender | 将日志輸出到檔案中 |
DailyRollingFileAppender | 将日志輸出到一個日志檔案,并且每天輸出到一個新的檔案 |
RollingFileAppender | 将日志資訊輸出到一個日志檔案,并且指定檔案的尺寸,當檔案大小達到指定尺寸時,會自動把檔案改名,同時産生一個新的檔案 |
JDBCAppender | 把日志資訊儲存到資料庫中 |
Layout
指定日志資訊的輸出格式
常用的Layout有以下幾種:
格式化器類型 | 作用 |
---|---|
HTMLLayout | 格式化日志輸出為HTML表格形式 |
SimpleLayout | 簡單的日志輸出格式化,列印的日志格式為(info - message) |
PatternLayout | 最強大的格式化期,可以根據自定義格式輸出日志,如果沒有指定轉換格式,就是用預設的轉換格式 |
執行個體
# RootLogger配置
log4j.rootLogger = trace, console
# 自定義Logger,都會繼承RootLogger中配置的console,日志等級都會被覆寫
log4j.logger.top.onefine = info, file
log4j.logger.org.apache = error
# 指定控制台日志輸出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定消息格式layout
#log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#log4j.appender.console.layout = org.apache.log4j.HTMLLayout
#log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
# 自定義消息輸出格式及配置
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = %d [%t] %-5p [%c] - %m%n
## 日志檔案輸出的appender對象
log4j.appender.file = org.apache.log4j.FileAppender
# 指定消息格式layout
log4j.appender.file.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.file.layout.conversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
# 指定日志檔案儲存路徑
log4j.appender.file.file = d:/logs/log4j.log
# 指定日志檔案的字元集
log4j.appender.file.encoding = UTF-8
package top.onefine;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.helpers.LogLog;
import org.junit.Test;
public class Log4jTest {
@Test
public void testQuick() {
//Logger名為 top.onefine.Log4jTest,繼承自log4j.properties中配置的命名為"top.onefine"的Log,日志等級為info,輸出方式有:console,file
Logger logger = Logger.getLogger(Log4jTest.class);
logger.fatal("fatal "); // 嚴重錯誤,一般會造成系統崩潰和終止運作
logger.error("error "); // 錯誤資訊,但不會影響系統運作
logger.warn("warn "); // 警告資訊,可能會發生問題
logger.info("info "); // 程式運作資訊,資料庫的連接配接、網絡、IO操作等
logger.debug("debug "); // 調試資訊,一般在開發階段使用,記錄程式的變量、參數等
logger.trace("trace "); // 追蹤資訊,記錄程式的所有流程資訊
//Logger名為 org.apache.log4j.Logger,繼承log4j.properties中配置的命名為"com.apache"的Log,日志等級為error,輸出方式有:console
Logger logger2 = Logger.getLogger(Logger.class);
logger2.fatal("fatal logger2"); // 嚴重錯誤,一般會造成系統崩潰和終止運作
logger2.error("error logger2"); // 錯誤資訊,但不會影響系統運作
logger2.warn("warn logger2"); // 警告資訊,可能會發生問題
logger2.info("info logger2"); // 程式運作資訊,資料庫的連接配接、網絡、IO操作等
logger2.debug("debug logger2"); // 調試資訊,一般在開發階段使用,記錄程式的變量、參數等
logger2.trace("trace logger2"); // 追蹤資訊,記錄程式的所有流程資訊
}
}
控制台輸出:
2020-05-17 20:58:13,203 [Test worker] FATAL [top.onefine.Log4jTest] - fatal
2020-05-17 20:58:13,206 [Test worker] ERROR [top.onefine.Log4jTest] - error
2020-05-17 20:58:13,207 [Test worker] WARN [top.onefine.Log4jTest] - warn
2020-05-17 20:58:13,207 [Test worker] INFO [top.onefine.Log4jTest] - info
2020-05-17 20:58:13,208 [Test worker] FATAL [org.apache.log4j.Logger] - fatal logger2
2020-05-17 20:58:13,208 [Test worker] ERROR [org.apache.log4j.Logger] - error logger2
轉載自:原文