Log4j列印日誌
阿新 • • 發佈:2021-09-13
Log4j
什麼是Log4j
- Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件
- 我們也可以控制每一條日誌的輸出格式;
- 通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。
- 通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。
1. 配置maven,引入jar包
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
2. 配置log4j的配置檔案
其配置檔名為log4j.properties,需要手動在java/resources下建立,如果建在其他位置,idea這個工具將無法識別(如果無法識別後面會介紹怎麼解決)。下面介紹該配置檔案的幾個基本配置項。
a. 日誌的輸出的目的地
形式 | 描述 |
---|---|
org.apache.log4j.ConsoleAppender | 控制檯 |
org.apache.log4j.FileAppender | 檔案 |
org.apache.log4j.DailyRollingFileAppender | 每天產生一個日誌檔案 |
org.apache.log4j.RollingFileAppender | 檔案大小到達指定尺寸的時候產生一個新的檔案 |
org.apache.log4j.WriterAppender | 將日誌資訊以流格式傳送到任意指定的地方 |
b. Layout:日誌輸出格式
形式 | 描述 |
---|---|
org.apache.log4j.HTMLLayout | 以HTML表格形式佈局 |
org.apache.log4j.PatternLayout | 可以靈活地指定佈局模式 |
org.apache.log4j.SimpleLayout | 包含日誌資訊的級別和資訊字串 |
org.apache.log4j.TTCCLayout | 包含日誌產生的時間、執行緒、類別等等資訊 |
c. 格式化日誌資訊
採用類似C語言中的printf函式的列印格式格式化日誌資訊
形式 | 描述 |
---|---|
%d | 輸出日誌時間點的日期或時間,可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS} |
%t | 輸出產生該日誌事件的執行緒名 |
%p | 優先順序 DEBUG/INFO/ERROR |
%c | 所屬類的全名(包括包名) |
%l | 發生的位置,在某個類的某行 |
%m | 輸出程式碼中指定的訊息,如log(message)中的message |
%n | 輸出一個換行符號 |
案例
案例使用如下的配置資訊:
### set log levels ###
log4j.rootLogger = DEBUG,Console,File
### 輸出到控制檯 ###
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}]-%l:%m%n
### 輸出到日誌檔案 ###
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=${project}src\\main\\resources\\app.log
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
3. 使用Log4j
public class UserMapperTest {
public static final Logger log = Logger.getLogger(UserMapperTest.class);
@Test
public void test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
log.debug("debug----sw");
log.error("error----sw");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}