Java日誌使用

  Java項目中常用的日誌門面技術有commons-logging、slf4j,常用的日誌實現技術有java.util.logging、log4j、logback。
  
  commons-logging是由apache提供的最早日誌門面,提供一個功能有限的簡單實現simple logger,實際使用中需加載具體的日誌實現包。commons-logging在程序運行時,使用classloader從classpath動態綁定日誌實現包,搜索順序爲log4j、java.util.logging、simple logger。一說是osgi不同的插件使用自己的classloader,導致commons-logging無法繼續工作,就是說無法加載具體的日誌實現包。項目中用其打日誌,需給出commons-logging.jar,具體的日誌庫xxx.jar,並通過配置文件指定使用哪種實現庫。

  slf4j,simple logging facade for java,其提供在程序運行前靜態綁定日誌實現包的功能,可解決commons-logging存在的動態加載問題,是目前推薦的日誌門面技術。項目中用其打日誌,需給出slf4j.jar,具體的日誌庫xxx.jar、門面橋接到具體日誌庫slf4j-xxx.jar,並通過綁定包slf4j-xxx.jar來指定使用哪種實現庫。

  java.util.logging,在jdk1.4之後的版本給出的日誌實現,功能比log4j少。
  log4j,目前推薦的日誌實現,功能比較強大。
  由log4j的開發者推出的logback,作爲log4j的替代者,有着更加優秀的功能。

  不管使用哪種日誌實現庫,日誌門面就commons-logging和slf4j兩種,明確這兩種門面接口的使用就算是掌握了在java項目中打日誌的方法。

===========================================

  早期Java項目使用最多的日誌門面是commons-logging,log4j是推薦的日誌實現庫,需要的jar包爲commons-logging.jar、log4j.jar。
  現今java項目推薦的日誌門面是slf4j,log4j仍是推薦的日誌實現庫,需要的jar包爲slf4j-api.jar、slf4j-log4j12.jar、log4j.jar,其中綁定包slf4j-log4j12.jar指定了要使用的實現庫。
  commons-logging存在osgi問題,但早期項目多使用其作爲日誌門面,爲保證兼容仍使用其作爲日誌門面,但通過slf4j的靜態綁定技術來加載具體的日誌庫log4j,需要的jar包爲commons-logging.jar、jcl-over-slf4j.jar、slf4j-api.jar、slf4j-log4j12.jar、log4j.jar,其中jcl-over-slf4j.jar將日誌的接口重定向到slf4j。

// 使用log4j需先將日誌的相關信息在屬性文件properties或xml文件配置好,剩下的事情就是在項目中的適當位置打日誌
public class LogTest {
    // slf4j接口使用
    // getLogger內調用slf4j-log4j.jar的StaticLoggerBinder類的getLogger,獲取對應的log4j
    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    // commons-logging接口使用
    // 與slf4j基本一樣,一個用Logger,一個用Log
    private static final Log logger = LoggerFactory.getLogger(LogTest.class);

    public static void main(String[] args) {
        logger.trace("trace");
        logger.debug("dubug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
    }
}

===========================================

  log4j信息的配置有兩種方式,屬性文件properties配置和xml文件配置,其中properties配置簡單、快速,xml配置嚴謹、規範。
  xml實現的功能比properties多,比如可以單獨輸出某一個級別的日誌,而properties則是輸出設定級別及其之上的所有日誌,通常的建議是能用preperties不要用xml。

# properties配置詳解

# 配置根Logger,語法爲
# log4j.rootLogger = level, appender1, appender2, ..
# level日誌級別,OFF、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、ALL
# 建議只使用DEBUG、INFO、WARN、ERROR四個級別
# 該級別類似開關,低於此級別的日誌不會輸出
# appender指定日誌的輸出目的地,可以有多個,名字可以隨便取,但儘量見名知意
log4j.rootLogger = info, console, file, ....

# 配置日誌輸出目的地類,語法爲
# log4j.appender.appender1 = className
#
# 目的地類有
# org.apache.log4j.ConsoleAppender 控制檯
# org.apache.log4j.FileAppender 文件
# org.apache.log4j.DailyRollingFileAppender 每天生成一個文件
# org.apache.log4j.RollingFileAppender 文件大小超過規定標準後產生一個新文件
# org.apache.log4j.WriterAppender 以流的格式寫到任意指定的地方
#
# 配置日誌輸出目的地類的選項,語法爲
# log4j.appender.appender1.option1 = value1
#
# ConsoleAppender選項
# Threshold = level 日誌輸出最低級別
# ImmediateFlush = true/false 默認true,立即輸出
# Target = System.err/out 默認值out,err爲紅色,out爲黑色
#
# FileAppender選項
# Threshold、ImmediateFlush同上
# File = xx\xx\xx.log 輸出路徑與文件
# Append = true 默認true,表示追加,否則覆蓋
# Encoding = UTF-8 編碼
#
# DailyRollingFileAppender 選項
# Threshold、ImmediateFlush、File、Append、Encoding同上
# DatePattern='.'yyyy-ww/MM 每週 每月 '.'yyyy-MM-dd 每天
# '.'yyyy-MM-dd-HH 每時 '.'yyyy-MM-dd-HH-mm 每分 產生一個文件
#
# 配置日誌格式類,語法爲
# log4j.appender.appender1.layout = className
# 
# 格式類有
# org.apache.log4j.HTMLLayout HTML格式
# org.apache.log4j.PatternLayout 以指定格式輸出
# org.apache.log4j.SimpleLayout 包括日誌級別
# org.apache.log4j.TTCCLayout 包括日誌時間、線程、類別等
# org.apache.log4j.xml.XMLLayout XML格式
#
# 配置日誌格式類的選項,語法爲
# log4j.appender.appender1.layout.option1 = value1
# 
# HTMLLayout選項
# LocationInfo = false 默認true,輸出java文件名和行號
# Title = xxx 默認Log4J Log Messages
#
# PatternLayout選項
# ConversionPattern = %m%n 對日誌信息格式化,類似C的printf
# %m 日誌內容
# %p 日誌級別
# %r 自應用啓動到該日誌輸出的毫秒數
# %c 日誌內容所在類的全名
# %t 日誌內容所在方法名
# %n 回車換行
# %d 日誌內容的輸出時間,如:%d{yyyy-MM-dd HH:mm:ss}
# %l 日誌內容所在的類、方法、行號
# %F 日誌內容所在的文件名稱
# %L 日誌內容所在行號
# 
# XMLLayout選項
# LocationInfo同上

# 輸出到控制檯配置舉例
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 [ %t:%r ] - [ %p ] %m%n

# 輸出到文件配置舉例
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = info
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

// xml配置詳解

// xml聲明
<?xml version="1.0" encoding="UTF-8"?>
// DTD聲明
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    // 配置根Logger 同上
    <root>
        <priority value ="debug"/>
        <appender-ref ref="conso"/>
        <appender-ref ref="file"/>
    </root>

    // additivity指定xfile是否繼承缺省的配置
    <logger name="com.runway.bssp.activeXdemo" additivity="false">
        <priority value ="info"/>
        <appender-ref ref="xfile" />
    </logger>

    // 配置目的地 有五種 同上
    <appender name="conso" class="org.apache.log4j.ConsoleAppender">
        // 配置目的地選項
        ....

        // 配置日誌格式和選項
        <layout class="org.apache.log4j.PatternLayout"
            <param name="ConversionPattern" value="%d %m %n" />
        </layout>

        // 配置過濾器和選項
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="info" />
            <param name="levelMax" value="error" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>

    // 配置目的地
    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        // 配置目的地選項
            <param name="File" value="D:/output.log" />
        <param name="Append" value="true" />
        // 設置文件最大尺寸
        <param name="MaxFileSize" value="1MB" />
        // 設置文件最大備份數
        <param name="MaxBackupIndex" value="10" />

        // 配置日誌格式和選項
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d - %t - %m%n" />
        </layout>
    </appender>

    // 配置目的地
    <appender name="xfile" class="org.apache.log4j.DailyRollingFileAppender">
        // 配置目的地選項
        <param name="File" value="E:/activex.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />

        // 配置日誌格式和選項
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d - %t - %m%n" />
        </layout>
    </appender>     
</log4j:configuration>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章