Java民工的鐵皮房

          Consciousness Of Programming - wjywilliam 想飛,總是會飛的......
          posts - 8, comments - 14, trackbacks - 0, articles - 9
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Log4j 各種輸出配置方法運用實例

          Posted on 2008-04-16 12:00 wjywilliam 閱讀(2515) 評論(0)  編輯  收藏 所屬分類: Log4j


           1. 以下是針對指定pakage層輸出到單獨Log文件實例

          在配置文件中按包名或類名來定義Logger
          在程序中按類名取Logger

          定義:
          log4j.rootLogger=debug,stdout
          log4j.logger.com.mypkg=debug,mypkg
          log4j.logger.com.mypkg.db=info,db
          log4j.logger.com.mypkg.mail=debug,mail

          log4j.appender.stdout=org.apache.log4j.ConsoleAppender
          log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
          log4j.appender.stdout.layout.ConversionPattern=%5r [%5p][%c{2}] %m%n

          log4j.appender.mypkg=org.apache.log4j.RollingFileAppender
          log4j.appender.mypkg.File=system.log
          log4j.appender.mypkg.Append=true
          log4j.appender.mypkg.MaxFileSize=1MB
          log4j.appender.mypkg.MaxBackupIndex=1
          log4j.appender.mypkg.layout=org.apache.log4j.PatternLayout
          log4j.appender.mypkg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

          log4j.appender.db=org.apache.log4j.FileAppender
          log4j.appender.db.File=db.log
          log4j.appender.db.Append=true
          log4j.appender.db.layout=org.apache.log4j.PatternLayout
          log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

          log4j.appender.mail=org.apache.log4j.FileAppender
          log4j.appender.mail.File=mail.log
          log4j.appender.mail.Append=true
          log4j.appender.mail.layout=org.apache.log4j.PatternLayout
          log4j.appender.mail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

          log4j.additivity.com.mypkg=false
          log4j.additivity.com.mypkg.db=false
          log4j.additivity.com.mypkg.mail=false

          使用:
          package com.mypkg;
          public class Class1
          {
              private static Logger logger = Logger.getLogger(Class1.class);

              ...
              if(logger.isDebugEnabled())
                  logger.debug("debug info");
              ...
          }

          package com.mypkg.db;
          public class Class2
          {
              private static Logger logger = Logger.getLogger(Class2.class);

              ...
              if(logger.isDebugEnabled())
                  logger.debug("debug info");
              ...
          }

          package com.mypkg.mail;
          public class Class3
          {
              private static Logger logger = Logger.getLogger(Class3.class);

              ...
              if(logger.isDebugEnabled())
                  logger.debug("debug info");
              ...
          }

          這樣一來:
            com.mypkg.mail下的類(Class3)的日志就會記入mail.log
            com.mypkg.db下的類(Class2)的日志就會記入db.log
            com.mypkg下的類(Class1)及類似com.mypkg.pkg1這樣的未定義相應Logger的包下的類(com.mypkg.pkg1.Class4)的日志就會記入system.log
            com.mypkg以外的類(com.pkg1.Class5)的日志就會記錄到rootLogger,即輸出到控制臺

          不管增加還是刪除日志配置項,都不需要修改程序:
              如果想去掉其中一個,如mail,只需從配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"這一行,去掉后com.mypkg.mail包下的類(如Class3)的日志就會記入system.log中。
              如果要新增Logger,如com.mypkg.pkg2,只需在配置文件中增加類似配置,com.mypkg.pkg2包下的類的日志就會記入新增的log文件,而不再記入system.log文件。

          2. 以下是針對某個class單獨輸出到Log文件實例

          還可以為指定類配置一個logger,如為類com.mypkg.db.ConnectionPool配置一個logger:
            log4j.logger.com.mypkg.db.ConnectionPool=debug,pool

            log4j.appender.pool=org.apache.log4j.FileAppender
            log4j.appender.pool.File=pool.log
            log4j.appender.pool.Append=true
            log4j.appender.pool.layout=org.apache.log4j.PatternLayout
            log4j.appender.pool.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

            log4j.additivity.com.mypkg.db.ConnectionPool=false

          這樣一來,ConnectionPool類的日志就會記入pool.log,不會記入db.log

          還可以兩個Logger使用同一個appender:
            log4j.logger.com.pkg1=debug,system
            log4j.logger.com.pkg2=info,system
          這樣的話com.pkg1和com.pkg2下的日志會分別以degug和info級別輸出到system這個appender指定的文件中

          3. 以下是針對指定Log Level單獨輸出到單獨的Log文件實例

            log4j.logger.errorLogger=ERROR, errorLog

            log4j.appender.errorLogger=org.apache.log4j.RollingFileAppender
            log4j.appender.errorLogger.File=/logs/error/errorLog.log
            log4j.appender.errorLogger.MaxFileSize=512KB
            log4j.appender.errorLogger.MaxBackupIndex=3
            log4j.appender.errorLogger.layout=org.apache.log4j.PatternLayout
            log4j.appender.errorLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

          關鍵在程序里面new log object時候這樣寫:
          慣例:
             Log log = LogFactory.getLog(this.getClass());
          指定輸出的appender(appender制定輸出的Level):
            
          Log log = LogFactory.getLog(errorLog);


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 广汉市| 屏东县| 郧西县| 静宁县| 玛纳斯县| 开鲁县| 张家口市| 青龙| 黄冈市| 贞丰县| 电白县| 古田县| 惠州市| 大渡口区| 于田县| 武定县| 大洼县| 永年县| 甘孜| 中西区| 错那县| 济南市| 五河县| 卢湾区| 哈巴河县| 曲阜市| 涿鹿县| 宣武区| 灵台县| 乌拉特前旗| 大丰市| 二手房| 古丈县| 和林格尔县| 甘南县| 电白县| 汶川县| 红原县| 丹巴县| 乐业县| 江安县|