夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

          在實(shí)際編程時,要使Log4j真正在系統(tǒng)中運(yùn)行事先還要對配置文件進(jìn)行定義。定義步驟就是對Logger、Appender及Layout的分別使用。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是java properties(key=value)【Java特性文件(鍵=值)】。(這里只說明properties文件)

          1、配置根Logger

                  其語法為:
                  log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
                  level : 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定 義了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。appenderName:就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。
                 例如:log4j.rootLogger=info,A1,B2,C3

          2、配置日志信息輸出目的地

                  其語法為:
                  log4j.appender.appenderName = fully.qualified.name.of.appender.class    //
                  "fully.qualified.name.of.appender.class" 可以指定下面五個目的地中的一個:

                      1.org.apache.log4j.ConsoleAppender(控制臺)
                      2.org.apache.log4j.FileAppender(文件)
                      3.org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件)
                      4.org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件)
                      5.org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

                         1.ConsoleAppender選項(xiàng)
                                Threshold=WARN:指定日志消息的輸出最低層次。
                                ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
                                Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺
                          2.FileAppender 選項(xiàng)
                                Threshold=WARN:指定日志消息的輸出最低層次。
                                ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
                                File=mylog.txt:指定消息輸出到mylog.txt文件。
                                Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
                        3.DailyRollingFileAppender 選項(xiàng)
                                Threshold=WARN:指定日志消息的輸出最低層次。
                                ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
                                File=mylog.txt:指定消息輸出到mylog.txt文件。
                                Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
                                DatePattern=''.''yyyy-ww:每周滾動一次文件,即每周產(chǎn)生一個新的文件。當(dāng)然也可以指定按月、周、天、時和分。即對應(yīng)的格式如下:
                                1)''.''yyyy-MM: 每月
                                2)''.''yyyy-ww: 每周  
                                3)''.''yyyy-MM-dd: 每天
                                4)''.''yyyy-MM-dd-a: 每天兩次
                                5)''.''yyyy-MM-dd-HH: 每小時
                                6)''.''yyyy-MM-dd-HH-mm: 每分鐘
                        4.RollingFileAppender 選項(xiàng)
                                Threshold=WARN:指定日志消息的輸出最低層次。
                                ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
                                File=mylog.txt:指定消息輸出到mylog.txt文件。
                                Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
                                MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達(dá)該大小時,將會自動滾動,即將原來的內(nèi)容移到mylog.log.1文件。
                                MaxBackupIndex=2:指定可以產(chǎn)生的滾動文件的最大數(shù)。

          3、配置日志信息的格式

                    其語法為:
            1). log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
                          "fully.qualified.name.of.layout.class" 可以指定下面4個格式中的一個:
                           1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
                     2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
                     3.org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
                     4.org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)
                               1.HTMLLayout 選項(xiàng)
                                  LocationInfo=true:默認(rèn)值是false,輸出java文件名稱和行號
                                  Title=my app file: 默認(rèn)值是 Log4J Log Messages.
                               2.PatternLayout 選項(xiàng)
                                  ConversionPattern=%m%n :指定怎樣格式化指定的消息。
                               3.XMLLayout    選項(xiàng)
                                  LocationInfo=true:默認(rèn)值是false,輸出java文件和行號
                    2). log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
                       這里需要說明的就是日志信息格式中幾個符號所代表的含義:
                       -X號: X信息輸出時左對齊;
                               %p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL,
                               %d: 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
                               %r: 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
                               %c: 輸出日志信息所屬的類目,通常就是所在類的全名
                               %t: 輸出產(chǎn)生該日志事件的線程名
                               %l: 輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
                               %x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中。
                               %%: 輸出一個"%"字符
                               %F: 輸出日志消息產(chǎn)生時所在的文件名稱
                               %L: 輸出代碼中的行號
                               %m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息
                               %n: 輸出一個回車換行符,Windows平臺為"
          ",Unix平臺為"
          "輸出日志信息換行
                        可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
                                 1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認(rèn)的情況下右對齊。
                                 2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。
                                 3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
                                 4)%20.30c:如果category的名稱小于20就補(bǔ)空格,并且右對齊,如果其名稱長于30字符,就從左邊交遠(yuǎn)銷出的字符截掉

           

           

           

          比較詳細(xì)的例子

           

          log4j.rootLogger=INFO,consoleAppender,logfile,MAIL
          log4j.addivity.org.apache=true

          #ConsoleAppender,控制臺輸出
          #FileAppender,文件日志輸出
          #SMTPAppender,發(fā)郵件輸出日志
          #SocketAppender,Socket日志
          #NTEventLogAppender,Window NT日志
          #SyslogAppender,
          #JMSAppender,
          #AsyncAppender,
          #NullAppender

          #文件輸出:RollingFileAppender
          #log4j.rootLogger = INFO,logfile
          log4j.appender.logfile = org.apache.log4j.RollingFileAppender
          log4j.appender.logfile.Threshold = INFO  
          # 輸出以上的INFO信息
          log4j.appender.logfile.File = INFO_log.html    
          #保存log文件路徑
          log4j.appender.logfile.Append = true   
          # 默認(rèn)為true,添加到末尾,false在每次啟動時進(jìn)行覆蓋
          log4j.appender.logfile.MaxFileSize = 1MB
          # 一個log文件的大小,超過這個大小就又會生成1個日志 # KB ,MB,GB
          log4j.appender.logfile.MaxBackupIndex = 3  
          # 最多保存3個文件備份
          log4j.appender.logfile.layout = org.apache.log4j.HTMLLayout
          # 輸出文件的格式
          log4j.appender.logfile.layout.LocationInfo = true
          #是否顯示類名和行數(shù)
          log4j.appender.logfile.layout.Title =title:\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
          #html頁面的 < title >
          ############################## SampleLayout ####################################
          # log4j.appender.logfile.layout = org.apache.log4j.SampleLayout
          ############################## PatternLayout ###################################
          # log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
          # log4j.appender.logfile.layout.ConversionPattern =% d % p [ % c] -   % m % n % d
          ############################## XMLLayout #######################################
          # log4j.appender.logfile.layout = org.apache.log4j.XMLLayout
          # log4j.appender.logfile.layout.LocationInfo = true #是否顯示類名和行數(shù)
          ############################## TTCCLayout ######################################
          # log4j.appender.logfile.layout = org.apache.log4j.TTCCLayout
          # log4j.appender.logfile.layout.DateFormat = ISO8601
          #NULL, RELATIVE, ABSOLUTE, DATE or ISO8601.
          # log4j.appender.logfile.layout.TimeZoneID = GMT - 8 : 00
          # log4j.appender.logfile.layout.CategoryPrefixing = false ##默認(rèn)為true 打印類別名
          # log4j.appender.logfile.layout.ContextPrinting = false ##默認(rèn)為true 打印上下文信息
          # log4j.appender.logfile.layout.ThreadPrinting = false ##默認(rèn)為true 打印線程名
          # 打印信息如下:
          #2007 - 09 - 13   14 : 45 : 39 , 765 [http - 8080 - 1 ] ERROR com.poxool.test.test - error成功關(guān)閉鏈接
          ###############################################################################
          #每天文件的輸出:DailyRollingFileAppender
          #log4j.rootLogger = INFO,errorlogfile
          log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
          log4j.appender.errorlogfile.Threshold = ERROR
          log4j.appender.errorlogfile.File = ../logs/ERROR_log
          log4j.appender.errorlogfile.Append = true
          #默認(rèn)為true,添加到末尾,false在每次啟動時進(jìn)行覆蓋
          log4j.appender.errorlogfile.ImmediateFlush = true  
          #直接輸出,不進(jìn)行緩存
          # ' . ' yyyy - MM: 每個月更新一個log日志
          # ' . ' yyyy - ww: 每個星期更新一個log日志
          # ' . ' yyyy - MM - dd: 每天更新一個log日志
          # ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一個log日志
          # ' . ' yyyy - MM - dd - HH: 每小時更新一個log日志
          # ' . ' yyyy - MM - dd - HH - mm: 每分鐘更新一個log日志
          log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
          #文件名稱的格式
          log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
          log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] -   %m %n %d

          #控制臺輸出:
          #log4j.rootLogger = INFO,consoleAppender
          log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
          log4j.appender.consoleAppender.Threshold = ERROR
          log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
          log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
          log4j.appender.consoleAppender.ImmediateFlush = true

          # 直接輸出,不進(jìn)行緩存
          log4j.appender.consoleAppender.Target = System.err
          # 默認(rèn)是System.out方式輸出

          #發(fā)送郵件:SMTPAppender
          #log4j.rootLogger = INFO,MAIL
          log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
          log4j.appender.MAIL.Threshold = INFO
          log4j.appender.MAIL.BufferSize = 10
          log4j.appender.MAIL.From = yourmail@gmail.com
          log4j.appender.MAIL.SMTPHost = smtp.gmail.com
          log4j.appender.MAIL.Subject = Log4J Message
          log4j.appender.MAIL.To = yourmail@gmail.com
          log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
          log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n

          #數(shù)據(jù)庫:JDBCAppender
          log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
          log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
          log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
          log4j.appender.DATABASE.user = ydbuser
          log4j.appender.DATABASE.password = ydbuser
          log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
          log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
          log4j.appender.DATABASE.layout.ConversionPattern =% d -   % c -%- 4r [ % t] %- 5p % c % x -   % m % n
          #數(shù)據(jù)庫的鏈接會有問題,可以重寫org.apache.log4j.jdbc.JDBCAppender的getConnection() 使用數(shù)據(jù)庫鏈接池去得鏈接,可以避免insert一條就鏈接一次數(shù)據(jù)庫

          posted on 2008-08-23 20:21 HUIKK 閱讀(11589) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 左贡县| 宁陵县| 吉木萨尔县| 新昌县| 蒙阴县| 庄河市| 贡山| 丰原市| 阳谷县| 营口市| 年辖:市辖区| 开平市| 五家渠市| 鸡东县| 高邮市| 通江县| 湟源县| 葵青区| 望谟县| 南岸区| 德庆县| 铜山县| 扎兰屯市| 阿拉善盟| 青海省| 洛南县| 九寨沟县| 定南县| 仙居县| 浪卡子县| 浦县| 康保县| 犍为县| 融水| 昌邑市| 会泽县| 三都| 遂昌县| 临桂县| 隆子县| 特克斯县|