點擊下方關注我,然后右上角點擊...“設為星標”,就能第一時間收到更新推送啦~~~
介紹幾個日志使用方面的基礎知識。
1
Log4j
1、Log4j 介紹
Log4j(log for java)是 Apache 的一個開源項目,通過使用 Log4j,我們可以控制日志信息輸出到日志文件、也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用程序的代碼。
2、Log4j 使用步驟說明
(1)選擇 jar 包
加入 log4j-1.2.17.jar 到 Libraries 下,如果使用 maven 項目,也可以選擇在 pom.xml 中新增依賴如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(2)log4j.properties 配置
Log4j 有三個主要組件:記錄器, appender 和布局。這三種類型的組件協(xié)同工作,使開發(fā)人員能夠根據消息類型和級別記錄消息,并在運行時控制這些消息的格式和報告位置。
Log4j 建議只使用四個級別,優(yōu)先級從高到低分別是 ERROR、WARN、INFO、DEBUG。
比如定義了 INFO 級別,只有等于及高于這個級別的才進行處理,則應用程序中所有 DEBUG 級別的日志信息將不被打印出來。ALL,打印所有的日志;OFF,關閉所有的日志輸出。
appenderName,就是指定日志信息輸出到哪個地方。可同時指定多個輸出目的地。
在 src 根目錄下建立 log4j.properties,根據自己的需求,相應的修改其中的配置,其內容如下所示:
#配置根Logger
#改代碼表示輸輸出info級別以上的日志,文件分別輸出,一個是file,一個是error
log4j.rootLogger=info,file,error
#配置file日志信息輸出目的地Appender
#定義名為file的輸出端是每天產生一個日志文件
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender #指定日志信息的最低輸出級別位INFO,默認為DEBUG。
log4j.appender.file.Threshold=INFO #指定當前消息輸出到jpm/log4j/log.log文件中
log4j.appender.file.File=/jpm/log4j/log.log #指定按天來滾動日志文件
log4j.appender.file.DatePattern=yyyy-MM-dd #配置日志信息的格式(布局)Layout是可以靈活地指定布局模式
log4j.appender.file.layout=org.apache.log4j.PatternLayout #格式化日志,Log4j采用類似C語言中的printf函數的打印格式格式化日志信息
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n #指定輸出信息的編碼
log4j.appender.file.encoding=UTF-8
#配置error日志信息輸出目的地Appender
#定義名為error的輸出端是每天產生一個日志文件
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender #指定日志信息的最低輸出級別位ERROR,默認為DEBUG。
log4j.appender.error.Threshold=ERROR #指定當前消息輸出到jpm/log4j/error.log文件中
log4j.appender.error.File=/jpm/log4j/error.log #指定按月來滾動日志文件
log4j.appender.error.DatePattern=yyyy-MM #配置日志信息的格式(布局)Layout是可以靈活地指定布局模式
log4j.appender.error.layout=org.apache.log4j.PatternLayout #格式化日志,Log4j采用類似C語言中的printf函數的打印格式格式化日志信息
log4j.appender.error.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n #指定輸出信息的編碼
log4j.appender.error.encoding=UTF-8
#使某個功能的日志單獨輸出到指定的日志文件
log4j.logger.saveUserLog=INFO,saveUserLog #該配置就是讓job的日志只輸出到自己指定的日志文件中,表示Logger不會在父Logger的appender里輸出,默認為true。
log4j.additivity.saveUserLog=false
log4j.appender.saveUserLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.saveUserLog.File=/jpm/log4j/saveUserLog.log
log4j.appender.saveUserLog.DatePattern=yyyy-MM-dd
log4j.appender.saveUserLog.Append=true
log4j.appender.saveUserLog.layout=org.apache.log4j.PatternLayout
log4j.appender.saveUserLog.layout.ConversionPattern=%m%n
log4j.appender.error.encoding=UTF-8
(3)輸出日志的代碼示例
package jpm;
import org.apache.log4j.Logger;
public class TestLog4j {
public static void main(String[] args) {
final Logger logger = Logger.getLogger(TestLog4j.class); final Logger saveUserLog = Logger.getLogger("saveUserLog"); if (logger.isDebugEnabled()) {
logger.debug("debug");
logger.info("info");
logger.error("error");
saveUserLog.info("張三,男,26歲,北京大學,2018-05-19,學霸");
}
}
4)以上代碼示例生成的日志文件及日志詳情
2
JUL (?java.util.logging)
1、JUL(?java.util.logging) 介紹
Java Logging API 是 Sun 公司于 2002 年 5 月正式發(fā)布的。它是自 J2SE 1.4 版本開始提供的一個新的應用程序接口,JUL(在 java.util.logging 包下),需 JDK1.4 版本以上才能支持,java.util.logging.* 包是 JDK 的日志記錄 API。
強烈不推薦使用 java.util.logging 記錄日志,因此這里不提供對應示例。
3
java common logging
commons-logging 提供的是一個日志接口,是為那些需要建立在不同環(huán)境下使用不同日志架構的組件或庫的開發(fā)者創(chuàng)建的,其中包括 log4j 以及 Java log 的日志架構。commons-logging 有兩個基本的抽象類:Log(基本記錄器) 和 LogFactory(負責創(chuàng)建 Log 實例)。把日志信息抽象成 commons-logging 的 Log 接口,并由 commons-logging 在運行時決定使用哪種日志架構。因為 Log4j 的強大功能,commons-logging 一般會和 Log4j 一起使用,這幾乎成為了 Java 日志的標準工具。
4
SLF4J 介紹
SLF4J 全稱為 Simple Logging Facade for JAVA,即 java 簡單日志門面。和 commons-loging 一樣也是對不同日志框架提供的一個門面封裝,可以在部署的時候不修改任何配置即可接入一種日志實現(xiàn)方案,能支持多個參數,并通過 {} 占位符進行替換。
看這個 Log4J 示例:? ?
Logger.debug("Hello " + name);
由于字符串拼接的問題(注:上述語句會先拼接字符串,再根據當前級別是否低于 debug 決定是否輸出本條日志,即使不輸出日志,字符串拼接操作也會執(zhí)行),因此許多公司一般強制使用下面的語句,這樣只有當前處于DEBUG級別時才會執(zhí)行字符串拼接:
if (logger.isDebugEnabled()) {
LOGGER.debug(“Hello ” + name);
}
它避免了字符串拼接問題,可是有點太繁瑣了。而 SLF4J 提供下面這樣簡單的語法:
LOGGER.debug("Hello {}", name);
它的形式類似第一條示例,但是又沒有字符串拼接問題,也不像第二條那樣繁瑣。
正是因為 SLF4J 的這個占位符功能,使得人們越來越多的地使用 SLF4J 這個接口用到實際開發(fā)項目中。
為什么需要日志接口,直接使用具體的實現(xiàn)不就行了嗎?
接口用于定制規(guī)范,可以有多個實現(xiàn),使用時是面向接口的(導入的包都是 SLF4J 的包或者是 JCL 的包,而不是具體某個日志框架中的包),即直接和接口交互,不直接使用實現(xiàn),所以當需要更換實現(xiàn)的時候,直接更換實現(xiàn)就可以了,而不用更改代碼中的日志相關代碼。
比如:SLF4J 定義了一套日志接口,項目中使用的日志框架是 log4j,開發(fā)中調用的所有接口都是 SLF4J 的,不直接使用 log4j,項目應用調用 SLF4J 的接口,SLF4J 的接口去調用 log4j 的實現(xiàn),整個應用程序并沒有直接使用 log4j,當項目需要更換更加優(yōu)秀的日志框架時(如 logback)只需要引入 logback 的 jar 和 logback 對應的配置文件即可,完全不用更改 Java 代碼中的日志相關的代碼 logger.info(“hello world”),也不用修改日志相關的類的導入的包(import org.slf4j.Logger; import org.slf4j.LoggerFactory;)。
因此日志門面的使用,為后續(xù)具體日志系統(tǒng)的實現(xiàn)更換帶來了方便。文章來源:http://www.zghlxwxcb.cn/news/detail-658698.html
后面為大家介紹項目中的 Logback 使用示例。文章來源地址http://www.zghlxwxcb.cn/news/detail-658698.html
到了這里,關于Java 項目日志實例基礎:Log4j的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!