posts - 11, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          Log4j 簡單配置

          Posted on 2006-01-26 18:09 -=Kinohl=- 閱讀(2827) 評(píng)論(2)  編輯  收藏 所屬分類: 讀書筆記

          Log4j 簡單配置
          ***************************************
          關(guān)鍵字:Log4j
          難易度:簡單

          軟件版本:apache-log4j-1.2.9
          時(shí)間:2006-01-26
          Author:Kino
          ***************************************

          呵呵 快過年了。眼看身邊的朋友一個(gè)一個(gè)離開,踏上歸途,心里不免有些淡淡的憂傷。為了消磨時(shí)間,寫寫文章也和久違的大家聊聊。

          這里先祝愿各位朋友新春快樂。在狗年旺、旺、旺旺旺。

          切入正題吧。大名鼎鼎的Log4j我也理解得不深,這里采用假設(shè)的問答方式介紹吧。
          Q:Log4j是個(gè)什么東西?
          A:Log4j應(yīng)該叫做 Log for java吧,是ApacheGroup旗下的明星項(xiàng)目,已經(jīng)應(yīng)用在很多方面了。同類的還有針對(duì)c c++等的log4c log4XXX之類。請(qǐng)自己看鏈接:

          Q:Log4j到底是怎么被應(yīng)用得?
          A:這就要從結(jié)構(gòu)上說了,首先我們應(yīng)用的并不是Log4j而是Jakarta-Commons-logging,但是這只是一個(gè)interface包沒有具體的實(shí)現(xiàn)(其實(shí)是有的,叫做SampleLog弱但是快)。所以在大火的source里你只需要面向Logging編程而無須關(guān)心到底是如何生成的。因?yàn)長ogging項(xiàng)目支持很多實(shí)現(xiàn)并不一定是Log4j。還有JDK的Log也行啊。那我們要做的就是  配置 Log4j到系統(tǒng)就好了。

          Q:Log4j到底要配置什么東西,才能被系統(tǒng)識(shí)別?
          A:2個(gè):Jar包  和  log4j配置文件。 Jar我就不說了。現(xiàn)在來說Log4j配置文件。這個(gè)文件可以隨意命名,默認(rèn)的文件是 log4j.properties 。放在你的src根目錄下就好。比如 你的source的catagory是com.yourcompany.xx那么放在和com并列的目錄下就好。

          Q:如果我不想用默認(rèn)的log4j.properties 我應(yīng)該怎么定義,怎么做?
          A:那就使用下邊的命令定義:
          System.setProperty("");  -_-! 具體內(nèi)容想不起來了,留言中補(bǔ)充吧。
          如果你是Struts工程或者Web工程,需要做一個(gè)sevlet把這段代碼載入。重載ActionServlet的init方法就好。

          Q:這個(gè)文件如何定義?
          A:如下例。(具體的可以查閱JavaDoc)
          ### direct log messages to console ###
          log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
          log4j.appender.CONSOLE.Target=System.out
          log4j.appender.CONSOLE.Threshold=INFO
          log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
          log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n

          ### direct messages to file gm_web.log ###
          log4j.appender.FILE=org.apache.log4j.RollingFileAppender
          log4j.appender.FILE.File=../logs/gm_web.log
          log4j.appender.FILE.MaxFileSize=1000KB
          log4j.appender.FILE.MaxBackupIndex=5
          log4j.appender.FILE.Append=true
          log4j.appender.FILE.Threshold=DEBUG
          log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
          log4j.appender.FILE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n

          # Set root category priority to INFO and its only appender to CONSOLE.
          log4j.rootCategory=ERROR, CONSOLE, FILE
          log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE

          XML格式的定義,我就不說了,資料滿天都是。

          Q:聽說Log記錄有繼承關(guān)系,那么多Log,效率太低了吧
          A:有繼承關(guān)系,對(duì)應(yīng)的當(dāng)然就有打破繼承的定義,比如上例。
          log4j.rootCategory=ERROR, CONSOLE, FILE
          log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE
          com.mycompany.ui就繼承了rootCategory的Log記錄級(jí)別。但是如果像破除使用additivity
          log4j.additivity.com.mycompany.ui=false
          就KO了。

          Q:log4j.appender.FILE.File=yourlogfile.log 到底給我把Log放哪去了?能改不?
          A:如果是Tomcat那就放到bin下邊了。能改啊,bin就是基準(zhǔn)目錄,寫相對(duì)路徑就好咯。如上例。

          Q:Log4j中ConversionPattern到底都是什么意思,都怎么用啊?
          A: 如下解釋

          1. [c]/[C] -- 返回用來決定 Class名稱 以及 package路徑(路徑也可是部分的)
          2. [d] -- 返回時(shí)間 可能有各種格式format的時(shí)間。
          3. [F] -- 返回發(fā)出記載Log請(qǐng)求的文件得名字。
          4. [l] -- 返回生成log事件的調(diào)用者的Location Information
          5. [L] -- 返回發(fā)出記載Log請(qǐng)求的行數(shù)。
          6. [m] -- 返回用戶自己寫的 message
          7. [M] -- 返回發(fā)出記載Log請(qǐng)求的方法名稱。
          8. [n] -- 返回 換行。(依據(jù)平臺(tái)不同而不同)
          9. [p] -- 返回Log事件的優(yōu)先級(jí)。
          10. [r] -- 返回從Application開始到這條Log事件產(chǎn)生之間的時(shí)間間隔。(毫秒)
          11. [t] -- 返回生成Log事件的線程名稱。
          12. [x] -- 返回與生成Log事件的線程相關(guān)的NDC(內(nèi)嵌特征內(nèi)容)
          13. [X] -- 返回與生成Log事件的線程相關(guān)的MDC(映射特征內(nèi)容),要KeyofMDC
          14. 分隔符 -- 空格,可能在left 也可能在 right


          Q:ConversionPattern參數(shù)能去哪里參考呢?
          A:JavaDoc  PatternLayout 類。

          http://logging.apache.org/log4j/docs/api-unstable/index.html

          Q:Log4j會(huì)不會(huì)太慢啊,性能如何?
          A:這個(gè)問題不好回答。反正記錄一條Log大約的時(shí)間是20ms 到 400ms吧,根據(jù)你ConversionPattern需要記錄的格式內(nèi)容,以及package catagory的繼承關(guān)系來決定。那么每個(gè)pattern到底哪個(gè)快哪個(gè)慢,哪個(gè)超級(jí)慢,請(qǐng)看http://logging.apache.org/log4j/docs/api-unstable/index.html。總歸一句話,只要讓log4j給你trace調(diào)用關(guān)系,反射class 就別指望能快,格誰都一樣,是吧。


          Q:下班了沒,啰嗦這么多,有問題再問你吧,留下聯(lián)系信息
          A:剛下班,還吃了朋友的蛋糕(他本人正在飛機(jī)上,哈哈,吃了個(gè)獨(dú)食),回家咯。討論問題的請(qǐng)留言或者kinoviti@gmail.com   QQ:23493713


          評(píng)論

          # re: Log4j 簡單配置  回復(fù)  更多評(píng)論   

          2006-01-26 22:54 by -=Kino=-
          >>>System.setProperty(""); -_-! 具體內(nèi)容想不起來了,留言中補(bǔ)充吧。
          具體為
          表明使用了Log4J:
          System.setProperty("org.apache.commons.logging.Log",
          "org.apache.commons.logging.impl.Log4JLogger");
          設(shè)定特殊文件的地方:
          URL log4jresource = this.getClass().getResource("log4j.properties");
          PropertyConfigurator.configure(log4jresource);
          可以把log4j.properties替換為log4j.xml

          # re: Log4j 簡單配置  回復(fù)  更多評(píng)論   

          2006-11-09 10:51 by 千千
          牛人,我的榜樣,

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 文化| 临湘市| 凤庆县| 苍山县| 平阳县| 金沙县| 阿拉善右旗| 河北省| 贵州省| 孝感市| 遵义市| 苍溪县| 酉阳| 衢州市| 张家港市| 襄城县| 阳春市| 古丈县| 石狮市| 九江市| 利辛县| 四平市| 哈密市| 苍梧县| 阳泉市| 黑山县| 玉田县| 隆安县| 平山县| 定陶县| 晋州市| 肥东县| 聂拉木县| 桦川县| 防城港市| 油尖旺区| 泰安市| 筠连县| 理塘县| 南华县| 邮箱|