log4j是一個用Java編寫的可靠,快速和靈活的日誌框架(API),它在Apache軟件許可下發布。apache
log4j安裝app
使用maven安裝,在pom.xml的dependencies節點直接添加如下依賴,便可使用框架
<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
log4j配置maven
能夠在類目錄下創建一個資源文件夾,如src/main/resources目錄下,新建log4j.properties配置文件,如佈局
log4j.rootLogger=DEBUG,FILE #file log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.File=./src/logs/out.log log4j.appender.FILE.Append=true log4j.appender.FILE.Threshold=DEBUG log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ] %p:%m%n
1. log4j.rootLogger=DEBUG,FILE線程
首先,級別優先級是ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。debug
這裏根的日誌級別設置DEBUG級別,用來控制下面全部appender節點的日誌級別。這裏設置了DEBUG,則表示大於等於DEBUG級別的日誌記錄纔會發送到下面的appender節點處理。日誌
而第二個參數FILE則是appender節點的名稱,另外DEBUG後面能夠放多個名稱的,若是log4j.rootLogger=DEBUG,FILE,FILE1,FILE2。code
2. log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppenderxml
這裏表示FILE是使用org.apache.log4j.DailyRollingFileAppender,而DailyRollingFileAppender是表明日誌文件滾動,後一天會把前一天的log文件更名。
另外還有org.apache.log4j.FileAppender所有寫在一個文件中,useorg.apache.log4j.RollingFileAppender表示日誌文件滾動,條件是maxFileSize文件大小,默認是大於10m就分開下一個文件寫日誌,
3. log4j.appender.FILE.DatePattern='.'yyyy-MM-dd,表示一天滾動一次。下面是列表
DatePattern | 描述 |
---|---|
'.' yyyy-MM | 滾動在每月的結束和下一個月初 |
'.' yyyy-MM-dd | 這是默認值,天天午夜滾動 |
'.' yyyy-MM-dd-a | 滾動每一天的午夜和中午 |
'.' yyyy-MM-dd-HH | 滾動在每個小時 |
'.' yyyy-MM-dd-HH-mm | 滾動在每個分鐘 |
'.' yyyy-ww | 滾動每一個星期取決於區域設置時的第一天 |
4. log4j.appender.FILE.File=./src/logs/out.log
這裏參數表示日誌文件存放路徑
5.log4j.appender.FILE.Append=true
表示是否添加到日誌文件末尾,若是爲false且存在日誌文件,就不寫入,坑。
6.log4j.appender.FILE.Threshold=DEBUG
表示能夠寫入的日誌級別,根節點的級別優先
7. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
表示使用模式格式寫日誌,另外還有HTMLLayout,XMLLayout,DateLayout等格式。
8.log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ] %p:%m%n
日誌寫入的實際內容,裏面的佔位符含義以下
轉換字符 | 表示的意思 |
---|---|
c | 用於輸出的記錄事件的類別。例如,對於類別名稱"a.b.c" 模式 %c{2} 會輸出 "b.c" |
C | 用於輸出呼叫者發出日誌請求的徹底限定類名。例如,對於類名 "org.apache.xyz.SomeClass", 模式 %C{1} 會輸出 "SomeClass". |
d | 用於輸出的記錄事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}. |
F | 用於輸出被髮出日誌記錄請求,其中的文件名 |
l | 用於將產生的日誌事件調用者輸出位置信息 |
L | 用於輸出從被髮出日誌記錄請求的行號 |
m | 用於輸出使用日誌事件相關聯的應用程序提供的消息 |
M | 用於輸出發出日誌請求所在的方法名稱 |
n | 輸出平臺相關的行分隔符或文字 |
p | 用於輸出的記錄事件的優先級 |
r | 用於輸出毫秒從佈局的結構通過直到建立日誌記錄事件的數目 |
t | 用於輸出生成的日誌記錄事件的線程的名稱 |
x | 用於與產生該日誌事件的線程相關聯輸出的NDC(嵌套診斷上下文) |
X | 在X轉換字符後面是鍵爲的MDC。例如 X{clientIP} 將打印存儲在MDC對鍵clientIP的信息 |
% | 文字百分號 %%將打印%標誌 |
slf4j是門面模式的典型應用,因此slf4j的做用是提供標準統一的API,而不是具體實現,好處就是更換日誌框架不須要修改代碼,只須要改maven的引用包。阿里巴巴開發規約裏面也強制規定了,
【強制】應用中不可直接使用日誌系統(Log4j、Logback)中的API,而應依賴使用日誌框架(SLF4J、JCL--Jakarta Commons Logging)中的API。
slf4j-simple、logback都是slf4j的具體實現,log4j並不直接實現slf4j,可是有專門的一層橋接slf4j-log4j12來實現slf4j。因此咱們若是使用log4j的話,只須要在pom.xml下面添加
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.8.0-alpha2</version> </dependency>
使用方式
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(App.class); public static void main(String[] args) { loggers.debug("debug"); }