【永恒的瞬間】
          ?Give me hapy ?
          在應(yīng)用程序中輸出日志有有三個(gè)目的:

          (1)監(jiān)視代碼中變量的變化情況,把數(shù)據(jù)周期性地記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析工作。

          (2)跟蹤代碼運(yùn)行進(jìn)軌跡,作為日后審計(jì)的依據(jù)。

          (3)擔(dān)當(dāng)集成開(kāi)發(fā)環(huán)境中的調(diào)試器,向文件或控制臺(tái)打印代碼的調(diào)試信息。

            Apache能用日志包(Commons Logging Package)是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目,它提供了一組通用的日志接口,用戶(hù)可以自由地選擇實(shí)現(xiàn)日志接口的第三方軟件。通用日志包目前支持以下日志實(shí)現(xiàn):

          • Log4J日志器(http://jakarta.apache.org/log4j
          • JDK1.4 Logging日志器(JDK1.4自帶)
          • SimpleLog日志器(把日志消息輸出到標(biāo)準(zhǔn)系統(tǒng)錯(cuò)誤流System.err)
          • NoOpLog(不輸出任何日志信息)

          通用日志包中的兩個(gè)常用接口:LogFactory和Log,分別介紹如下:

          • Log接口

          通用日志包把消息分為6個(gè)級(jí)別:FATAL、ERROR、WARN、INFO、DEBUG和TRACE。其中FATAL級(jí)別最高,TRACE級(jí)別最低。Log接口提供輸出不同級(jí)別消息的方法:

          fatal(Object message)-------輸出FATAL級(jí)別的消息。

          error(Object message)-------輸出ERROR級(jí)別的消息。

          warn(Object message)-------輸出WARN級(jí)別的消息。

          info(Object message)-------輸出INFO級(jí)別的消息。

          debug(Object message)-------輸出DEBUG級(jí)別的消息。

          trace(Object message)-------輸出TRACE級(jí)別的消息。

          注:只有當(dāng)輸出日志的級(jí)別大于或等于為日志配置器配置的日志級(jí)別時(shí),這個(gè)方法才會(huì)執(zhí)行。

            如何指定日志器的日志級(jí)別,不同的日志器實(shí)現(xiàn)會(huì)有不同的實(shí)現(xiàn)方案。

          • LogFactory接口

          LogFactory接口提供了獲得日志器實(shí)例的兩個(gè)靜態(tài)方法:

          public static Log getLog(String name) throws LogConfigurationException;

          public static Log getLog(Class class) throws LogConfigurationException;

          注:name參數(shù)作為日志器的名字;class參數(shù)指定類(lèi)名作為日志器名字。

          以下介紹最常用的一個(gè)日志實(shí)現(xiàn)--------Log4J

            Log4j是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目,它是一個(gè)日志操作包。通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。最令人感興趣的就是,這些可以通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。
          此外,通過(guò)Log4j其他語(yǔ)言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語(yǔ)法和用法與在Java程序中一樣,使得多語(yǔ)言分布式系統(tǒng)得到一個(gè)統(tǒng)一一致的日志組件模塊。而且,通過(guò)使用各種第三方擴(kuò)展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應(yīng)用中。

            Log4J主要由三大組件構(gòu)成:

          • Logger:負(fù)責(zé)生成日志,并能根據(jù)配置的日志級(jí)別來(lái)決定什么日志消息應(yīng)該被輸出,什么日志消息應(yīng)該被忽略。
          • Appender:定義日志消息輸出的目的地,指定日志消息應(yīng)該被輸出到什么地方,這些地方可以是控制臺(tái)、文件和網(wǎng)絡(luò)設(shè)備等。
          • Layout:指定日志消息的輸出格式。

            這三個(gè)組件協(xié)同工作,使得開(kāi)發(fā)者能夠依據(jù)日志消息類(lèi)別來(lái)輸出日志,并能夠在程序運(yùn)行期間,控制日志消息的輸出格式以及日志存放地點(diǎn)。

            Log4J的配置

            配置Log4J,需要分別配置它的Logger、Appender和Layout屬性。配置文件一般為log4j.properties。當(dāng)然也可以以XML文件來(lái)配置,這里介紹以屬性文件配置。

          • 配置Logger組件

          Logger組件支持繼承關(guān)系,所有的Logger組件都直接或間接繼承rootLogger。配置rootLogger的語(yǔ)法為:

            log4j.rootLogger=[priority],appenderName,appenderName,......

          priority是如前所述的日志級(jí)別;

          appenderName指定Appender組件,用戶(hù)可以同時(shí)指定多個(gè)Appender組件,以與逗號(hào)分隔。

          • 配置Appender組件

          配置日志消息輸出目的地Appender,語(yǔ)法為:

            log4j.appender.appenderName=<appender的完整類(lèi)名>

            log4j.appender.appenderName.option1=value1

            log4j.appender.appenderName.option2=value2

            ...

          Log4J共有以下幾種Appender:

            org.apache.log4j.ConsoleAppender(控制臺(tái))

            org.apache.log4j.FileAppender(文件)

            org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)

            org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)

            org.apache.log4j.WriterAppender(將日志消息以流格式發(fā)送到任意指定的地方)

          • 配置Layout組件

          語(yǔ)法:

             log4j.appender.appenderName.layout=<layout的完整類(lèi)名>

             log4j.appender.appenderName.layout.option1=value1

             log4j.appender.appenderName.layout.option2=value2

             ...

          Log4J提供以下幾種Layout:

            org.apache.log4j.HTMLLayout(以HTML表格形式布局)

            org.apache.log4j.PatternLayout(可以靈活地指定布局模式)

            org.apache.log4j.SimpleLayout(包含日志消息的級(jí)別和信息字符串)

            org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線(xiàn)程和類(lèi)別等信息)

          通過(guò)設(shè)置PatternLayout的ConversionPattern屬性來(lái)指定輸出格式

          ConversionPattern的格式如下表所示:

          格式名      含義
          %c       輸出日志信息所屬的類(lèi)的全名
          %d      輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:

          ??????????????????????????? %d{yyy-MM-dd HH:mm:ss },輸出類(lèi)似:2002-10-18- 22:10:28
          %f       輸出日志信息所屬的類(lèi)的類(lèi)名
          %l       輸出日志事件的發(fā)生位置,即輸出日志信息的語(yǔ)句處于它所在的類(lèi)的第幾行
          %m     ?? 輸出代碼中指定的信息,如log(message)中的message
          %n      輸出一個(gè)回車(chē)換行符,Windows平臺(tái)為“\r\n”,Unix平臺(tái)為“\n”
          %p      輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL。如果是調(diào)用debug()輸出的,則為DEBUG,依此類(lèi)推
          %r      輸出自應(yīng)用啟動(dòng)到輸出該日志信息所耗費(fèi)的毫秒數(shù)
          %t      輸出產(chǎn)生該日志事件的線(xiàn)程名


          示例:log4j.appender.file.layout=org.apache.log4j.PatternLayout

             log4j.appender.file.layout.ConversionPattern=%t %p- %m%n

          Log4J對(duì)應(yīng)用性能的影響

            如果在程序運(yùn)行中輸出大量日志,顯然會(huì)對(duì)應(yīng)用的性能造成一定的影響。Log4J對(duì)性能的影響取決于以下因素:

          • 日志輸出目的地:輸出到控制臺(tái)的速度和輸出到文件系統(tǒng)的速度是不一樣的。
          • 日志輸出格式:格式簡(jiǎn)單,速度也更快。
          • 日志級(jí)別:日志級(jí)別設(shè)置的越低,輸出的日志內(nèi)容越多,對(duì)性能的影響也越大。
          posted on 2007-01-03 16:46 ???MengChuChen 閱讀(962) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Log4j
          主站蜘蛛池模板: 丹江口市| 宝山区| 双柏县| 且末县| 会理县| 蒙自县| 巨野县| 潞西市| 永寿县| 庆阳市| 响水县| 平乐县| 南陵县| 雷波县| 新建县| 东辽县| 万源市| 胶州市| 泸州市| 黎平县| 五常市| 罗平县| 上饶县| 洛川县| 巴塘县| 万全县| 吴川市| 兰西县| 双流县| 台东县| 洮南市| 麻阳| 岳阳县| 鸡泽县| 定远县| 宁远县| 惠东县| 天等县| 麻城市| 鄄城县| 池州市|