首先,這里并沒有非常詳細的來介紹log4j砌庄。只是按照步驟、流程來明白怎么去使用奕枢。更多細節(jié)還是請閱讀log4j官網(wǎng)娄昆。
什么是Log4j?
log4j是一款功能強大的日志組件,來源于遵守開源精神的apache組織缝彬。鏈接地址萌焰。
它有三個重要的組件
- 記錄器(Loggers):指定日志輸出級別。如果代碼中使用的級別小于記錄器配置的級別則不會被輸出谷浅。順序:ALL <DEBUG<INFO<WARN<ERROR<FATAL<OFF
- 依附器或者叫輸出源(Appenders):為什么叫輸出源呢扒俯?因為這個組件的作用是日志信息輸出到控制臺、文件甚至數(shù)據(jù)庫中一疯。那我為什么又叫它依附器呢撼玄?因為它的實現(xiàn)是要依附于(=)某個實現(xiàn)類的。如下
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- 布局(Layouts)
用戶可以根據(jù)自己的喜好格式化自己的日志信息墩邀。在appender后加上layout就可以完成這個功能掌猛。它可以是HTML樣式(org.apache.log4j.HTMLLayout
)、自由定制的樣式(org.apache.log4j.PatternLayout
)眉睹、簡單樣式(org.apache.log4j.SimpleLayout
- 輸出日志的級別和信息字符串信息)留潦、TTCC樣式(org.apache.log4j.TTCCLayout
- 用于輸出日志產(chǎn)生時間類別或者線程登信息的時候)
示例如下
log4j.appender.youName.layout=layoutClassName
log4j到底該怎么用?
Step1.導jar包
Maven:
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Step2.書寫配置文件(log4j.properties)
該文件在你項目的Source Folder下創(chuàng)建
<!-- 配置記錄器(logger)辣往,名稱可以自定義(默認級別debug) -->
log4j.rootLogger = INFO,stdout,code666
<!-- 輸出源,這里是輸出到控制臺 -->
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
<!-- 布局,自由定制的樣式PatternLayout -->
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
<!-- code666,輸出到文件 -->
log4j.appender.code666 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.code666.File =E:\error.log
log4j.appender.code666.Append = true
log4j.appender.code666.Threshold = ERROR
log4j.appender.code666.layout = org.apache.log4j.PatternLayout
log4j.appender.code666.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
Step3.測試類(Test.class)
import org.apache.log4j.Logger;
public class Test {
private static final Logger log = Logger.getLogger(Test.class);
public static void main(String[] args) {
log.debug("i am debug message");
log.info("i am info message");
}
}
最終輸出結(jié)果為"
i am info message
",因為默認為info級別兔院,而debug是小于info級別的,所以不顯示站削。
擴展之slf4j的使用
-
slf4j是什么?
JAVA簡易日志門面坊萝,是一套包裝Logging 框架的界面程式,以外觀模式實現(xiàn)∈迹可以在軟件部署的時候決定要使用的Logging 框架菩鲜,目前主要支援的有Java Logging API、log4j及l(fā)ogback等框架惦积。以MIT 授權(quán)方式發(fā)布接校。==維基百科==
slf4j內(nèi)部并沒有任何日志的實現(xiàn)類,它只是提供了一些接口狮崩。也就是一套接口支持logging蛛勉、logback、log4j等日志框架睦柴。
- slf4j怎么搭配log4j使用?
- maven
需要導入slf4j-api與slf4j-log4j12诽凌,由于slf4j-log4j12里包含了log4j,所以不必要再寫log4j的依賴
<!-- <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> --> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
- Test類
這里是用Logger.getLogger的工廠方式來獲取slf4j的Logger對象
運行后顯示與上一樣坦敌。//import org.apache.log4j.Logger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { //private static final Logger log = Logger.getLogger(Test.class); private static final Logger log = LoggerFactory.getLogger(Test.class); public static void main(String[] args) { log.debug("i am debug message"); log.info("i am info message"); } }
- maven
log4j輸出源的其它配置(搬運互聯(lián)網(wǎng))
- 控制臺console日志輸出源
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
- 文件logFile日志輸出源
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=D:/logs/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
- 回滾文件rollingFile日志輸出源
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=D:/logs/log.log4j
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
- 定期回滾文件dailyFile日志輸出源
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=D:/logs/log.log4j
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
- 應用于socket日志輸出源
log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true
- 發(fā)送日志到指定郵件
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From = xxx@mail.com
log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= xxx@mail.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
- 應用到數(shù)據(jù)庫
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
覺得還行可以點個星星哦