隨筆-126  評論-247  文章-5  trackbacks-0

          Log4j ( Log for Java ) 是 Apache 下的一個開源項目,通過 Log4j,可以將程序運行的信息輸送到指定的目的地。這個目的地可以是控制臺、文件、郵箱等。

          Log4j 支持兩種格式的文件配置,即 properties 和 xml 兩種格式的文件。下面將要介紹的是采用 properties 格式的配置。

           log4j.properties 配置示例  


          log4j.rootLogger
          = INFO, logOutput

          log4j.appender.logOutput = org.apache.log4j.FileAppender

          log4j.appender.logOutput.file = src/main/resources/log/demoLog.log

          log4j.appender.logOutput.layout = org.apache.log4j.PatternLayout

          log4j.appender.logOutput.layout.conversionPattern = %n%n%d{yyyy-MM-dd HH:mm:ss}%n%p  %c  %L%n%m



          ① [ 配置日志級別和輸出源 ]

                log4j.rootLogger = 級別,輸出源1,輸出源2 … …

               日志信息優先級別 :  ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

               常用優先級別 : DEBUG < INFO < WARN < ERROR

                   - DEBUG : 程序的調試信息

                   - INFO  :  程序的一般信息,例如,用戶的登錄、登出,方法執行成功信息等

                   - WARN :  程序的警告信息

                   - ERROR :  程序的嚴重錯誤信息,例如,程序的執行拋出異常

                   Tips : 只有當日志信息的優先級別大于等于配置的日志信息級別,日志信息才會被記錄到日志。

               日志輸出源 : 

                   - 日志輸出源的個數可以是一個,也可以是多個,多個輸出源的時候,輸出源與輸出源之間用逗號分隔

                   - 日志輸出源的名字可以根據需要,自定義起名

          ② [ 指定輸出源輔助類 ]

                log4j.appender.輸出源名稱 = Appender.class

                常用的 Appender ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

                1. org.apache.log4j.FileAppender(文件)

                2. org.apache.log4j.ConsoleAppender(控制臺)

                3. org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)

                4. org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

          ③ [ 指定輸出源文件存放路徑 ]

                log4j.appender.輸出源名稱.file = path ( 日志具體存放路徑 )

          ④ [ 指定輸出源文件的格式布局 ]

                log4j.appender.輸出源名稱.layout = Layout.class

               常用的 Layout ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

               1. org.apache.log4j.SimpleLayout  ( 簡單的布局方式,含日志信息的級別和信息 )

               2. org.apache.log4j.PatternLayout  ( 可自定義的布局模式 )

               3. org.apache.log4j.HTMLLayout   ( 以 HTML 方式布局 )

          ⑤ [ 自定義布局模式,可選 ]

                log4j.appender.輸出源名稱.layout.conversionPattern

               %p : 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL …

               %d : 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,例如:%d{yyy-MMM-dd HH:mm:ss},輸出類似:2012-10-10 12:20:18 

               %r : 輸出自應用啟動到輸出該log信息耗費的毫秒數

               %c : 輸出日志信息所屬的類,通常就是所在類的全名

               %t : 輸出產生該日志事件的線程名

               %l : 輸出日志事件的發生位置

               %x : 輸出和當前線程相關聯的信息

               %% : 輸出一個"%"字符

               %F : 輸出日志消息產生時所在的文件名稱

               %L : 輸出代碼中的行號

               %m : 輸出代碼中指定的消息,產生的日志具體信息

               %n : 換行


          環境  :  JDK 1.6,Eclipse 3.6,Maven  3.0.4,log4j 1.2.16,mail 1.4.4

          項目結構 :



           pom.xml 部分清單   

          <!-- log4j -->

          <dependency>

           <groupId>log4j</groupId>

           <artifactId>log4j</artifactId>

           <version>1.2.16</version>

          </dependency>

          <!-- java mail -->

          <dependency>

           <groupId>javax.mail</groupId>

           <artifactId>mail</artifactId>

           <version>1.4.4</version>

          </dependency>
           

           
          注 : 此處配置 pom.xml 是使用 maven 來管理 jar 包,如果你沒有使用 maven,則需手動導入相關 jar 包。

           log4j.properties 清單   

          log4j.rootLogger = INFO, logOutput, htmlOutput, console

          # Txt log

          log4j.appender.logOutput = org.apache.log4j.FileAppender

          log4j.appender.logOutput.file =  src/main/resources/log/demoLog.log

          log4j.appender.logOutput.layout = org.apache.log4j.PatternLayout

          log4j.appender.logOutput.layout.conversionPattern =  %n%n%d{yyyy-MM-dd HH:mm:ss}%n%p %c %L%n%m

          # Html log

          log4j.appender.htmlOutput = org.apache.log4j.FileAppender

          log4j.appender.htmlOutput.file = D:/fancydeepin/log/demoLog.html

          log4j.appender.htmlOutput.layout = org.apache.log4j.HTMLLayout

          # Console log

          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{yyyy-MM-dd HH:mm:ss}%n%p %c   %L%n%m%n

          # Email log

          #log4j.appender.mail = org.apache.log4j.net.SMTPAppender

          #log4j.appender.mail.Threshold = ERROR

          #log4j.appender.mail.BufferSize = 512

          #log4j.appender.mail.SMTPHost = smtp.yeah.net

          #log4j.appender.mail.Subject = Log4J Message

          #log4j.appender.mail.From = fancydeepin@yeah.net

          #log4j.appender.mail.To = fancydeepin@yeah.net

          #log4j.appender.mail.SMTPAuth = true

          #log4j.appender.mail.SMTPUsername = username

          #log4j.appender.mail.SMTPPassword = password

          #log4j.appender.mail.Encoding = GBK

          #log4j.appender.mail.layout = org.apache.log4j.PatternLayout

          #log4j.appender.mail.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}%n%p %c %L%n%m

           

           

           測試代碼   

          package test;

          import java.util.Random;

          import org.apache.log4j.Logger;

          public class TestApp {

             private static Logger log = Logger.getLogger(TestApp.class);


            
          public static void main(String[] args){

                try {

                   Random randomException = new Random();

                   Object result = 10 / randomException.nextInt(2);

                   log.info("Method execute successfully.\nThe result is " + result);

                } catch (Exception e) {

                   log.error(e);

                }

             }

          }

           

           demoLog.log 部分信息   

          2012-10-10 12:39:11

          ERROR test.TestApp 17

          java.lang.ArithmeticException: / by zero

           

          2012-10-10 12:39:13

          INFO test.TestApp 15

          Method execute successfully.

          The result is 10

           

          2012-10-10 12:39:15

          ERROR test.TestApp 17

          java.lang.ArithmeticException: / by zero


          注 : 如果在 log4j.properties 中配置了日志信息發送到郵箱,即將上面的 log4j.properties 配置中的 # Email log 下面的注釋 ( properties 文件中 ' # ' 是行注釋  )

          全部取消的話,則需要在配置中添加一個輸出源,同樣的,這個輸出源的名稱是自定義的,在這里,如果我去掉注釋,則需要多配一個名稱叫 mail 的輸出源,除此之外,

          還需要添加 java 的 mail 的 jar 包,否則,后臺將拋出 java.lang.ClassNotFoundException 的異常信息。



            
          posted on 2012-10-11 20:12 fancydeepin 閱讀(5486) 評論(0)  編輯  收藏

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


          網站導航:
           

          隨筆分類(8)

          隨筆檔案(104)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1462064
          • 排名 - 15

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 大化| 阜南县| 新源县| 巴林右旗| 民丰县| 民县| 荥经县| 五大连池市| 福海县| 菏泽市| 体育| 喀喇沁旗| 浮梁县| 颍上县| 五台县| 吉林市| 海宁市| 阿拉善盟| 黄浦区| 油尖旺区| 同心县| 马龙县| 谷城县| 徐汇区| 平乐县| 东兰县| 边坝县| 万安县| 旬阳县| 乃东县| 隆子县| 汝阳县| 寻甸| 新龙县| 安福县| 铜梁县| 璧山县| 武乡县| 成安县| 灵璧县| 满洲里市|