Log4j真的超簡單

首先,這里并沒有非常詳細的來介紹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使用?
    1. 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>
    
    1. 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");
            }
        }
    
    運行后顯示與上一樣坦敌。

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

覺得還行可以點個星星哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侣诵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狱窘,更是在濱河造成了極大的恐慌杜顺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸炸,死亡現(xiàn)場離奇詭異躬络,居然都是意外死亡,警方通過查閱死者的電腦和手機幻馁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門洗鸵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仗嗦,你說我怎么就攤上這事膘滨。” “怎么了稀拐?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵火邓,是天一觀的道長。 經(jīng)常有香客問我德撬,道長铲咨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任蜓洪,我火速辦了婚禮纤勒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隆檀。我一直安慰自己摇天,他們只是感情好粹湃,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泉坐,像睡著了一般为鳄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腕让,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天孤钦,我揣著相機與錄音,去河邊找鬼纯丸。 笑死偏形,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的液南。 我是一名探鬼主播壳猜,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼勾徽,長吁一口氣:“原來是場噩夢啊……” “哼滑凉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喘帚,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤畅姊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吹由,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體若未,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年倾鲫,在試婚紗的時候發(fā)現(xiàn)自己被綠了粗合。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡乌昔,死狀恐怖隙疚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磕道,我是刑警寧澤供屉,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站溺蕉,受9級特大地震影響伶丐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疯特,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一哗魂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漓雅,春花似錦录别、人聲如沸羹与。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵搁。三九已至,卻和暖如春往踢,著一層夾襖步出監(jiān)牢的瞬間腾誉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工峻呕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留利职,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓瘦癌,卻偏偏與公主長得像猪贪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讯私,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容