国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

log4j日志總結

2019-11-06 06:23:38
字體:
來源:轉載
供稿:網友
一、log4j簡介          日志組件,依托Log4j.jar工具包,主要用于記錄日志信息,規定日志要輸出的地方和日志以何種形式進行輸出。二、日志輸出級別debug級別 < 可以通過配置文件規定輸出消息的級別。三、log4j的組成、配置及使用       1)主要由3個重要的組件組成部分:Logger組件、Appender組件、Layout組件          a、 Logger組件:日志器,里面提供了一些方法,用于往外輸出日志                log4j.additivity.org.apache=false:表示Logger不會在父Logger的appender里輸出,默認為true。          b、Appender組件:用于指定信息輸出方式,例如控制臺輸出、文件輸出、流輸出等               (1)asyncAppender:異步記日志               (1)fileAppender:文件                    選項:                        1) Threshold=WARN   指定日志消息的輸出最低層次。                         2) ImmediateFlush=true   默認值是true,意謂著所有的消息都會被立即輸出。                         3) File=mylog.txt   指定消息輸出到mylog.txt文件。                         4) Append=false   默認值是true,即將消息追加到指定文件中,false指將消息覆蓋指定的文件內容。                    例如:     
                         log4j.rootLogger = debug,stdout,D,E
                         log4j.appender.D = org.apache.log4j.FileAppender                         log4j.appender.D.File = E://logs/log.log                         log4j.appender.D.Append = true                                            log4j.appender.D.Threshold = DEBUG                          log4j.appender.D.layout = org.apache.log4j.PatternLayout                         log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]               (2)consoleAppender:控制臺記錄日志                    選項:                        (1) Threshold=WARN    指定日志消息的輸出最低層次。                         (2) ImmediateFlush=true   默認值是true,意謂著所有的消息都會被立即輸出。                         (3)Target=System.out   默認情況下是:System.out,指定輸出控制臺                     例如:
                        log4j.rootLogger = debug,stdout         
                        log4j.appender.stdout = org.apache.log4j.ConsoleAppender                        log4j.appender.stdout.Target = System.out                        log4j.appender.stdout.layout = org.apache.log4j.PatternLayout                        log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} meth                (3)DailyRollingFileAppender:每天產生一個日志文件                    選項:                        (1)Threshold=WARN   指定日志消息的輸出最低層次。                         (2)ImmediateFlush=true   默認值是true,意謂著所有的消息都會被立即輸出。                         (3)File=mylog.txt   指定消息輸出到mylog.txt文件。                         (4)Append=false   默認值是true,即以追加的方式將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。                         (5)DatePattern=''.''yyyy-ww   每周滾動一次文件,即每周產生一個新的文件。當然也可以指定按月、周、天、時和分                             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: 每分鐘                       例如:                            log4j.appender.file=org.apache.log4j.DailyRollingFileAppender                            log4j.appender.file.DatePattern='.'yyyy-MM-dd                            log4j.appender.file.File=D://run.log                            當前月的日志文件名為run.log,前一個月的日志文件名為run.log.yyyy-MM-dd

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

                        選項:

                            (1)Threshold=WARN   指定日志消息的輸出最低層次。                             (2)ImmediateFlush=true   默認值是true,意謂著所有的消息都會被立即輸出。                             (3)File=mylog.txt   指定消息輸出到mylog.txt文件。                             (4)Append=false   默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。                             (5)MaxFileSize=100KB   后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動 。                            (6)MaxBackupIndex=2   指定可以產生的滾動文件的最大數。

                        例如:

                             log4j.appender.R.MaxFileSize=10MB                             log4j.appender.R.MaxBackupIndex=10

                             一個日志文件最大10M,到了10M后自動創建一個新的文件,但最多創建10個,超過10個后自動刪除最舊的那個。 

                 (5)WriterAppender:將日志信息以流格式發送到任意指定的地方

                            log4j.rootCategory= DEBUG,WriterAppender                            log4j.appender.WriterAppender=org.apache.log4j.WriterAppender                            log4j.appender.WriterAppender.Threshold=debug                            log4j.appender.WriterAppender.layout=org.apache.log4j.PatternLayout                            log4j.appender.WriterAppender.layout.ConversionPattern=%d{ISO8601} - %p - %m%n

          c、Layout組件:用于指定信息輸出格式               (1)HTMLLayout:以HTML表格形式布局                    選項:                         LocationInfo=true:默認值是false,輸出java文件名稱和行號                          Title=my app file: 默認值是 Log4J Log Messages.                (2) PatternLayout:可以靈活地指定布局模式                    選項:                         ConversionPattern=%m%n :指定怎樣格式化指定的消息               (3)SimpleLayout:包含日志信息的級別和信息字符串               (4)TTCCLayout:包含日志產生的時間、線程、類別等等信息               (5)xmlLayout:   以XML格式進行輸出                    選項:LocationInfo=true:默認值是false,輸出java文件名稱和行號                                          三個組件之間的關系:一個logger可以有多個Appender。然后每個Appender只有一個layout         2) 配置日志信息的格式            #src/log4j.PRoperties                log4j.rootLogger = DEBUG,console,file            #appender                log4j.appender.console = org.apache.log4j.ConsoleAppender                log4j.appender.file = org.apache.log4j.FileAppender                log4j.appender.file.File = D/://log4j.html            #layout                log4j.appender.console.layout = org.apache.log4j.SimpleLayout                log4j.appender.file.layout =org.apache.log4j.HTMLLayout          第一個參數定義消息級別,將大于等于這個消息級別的信息進行輸出          第二個參數定義輸出方式,只是一個標識符,通過這個標識符來指定輸出方式          第三個組件指定信息輸出格式                         附:比較全面的配置        Log4j配置文件實現了輸出到控制臺、文件、回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。        log4j.rootLogger=DEBUG,console,dailyFile,im        log4j.additivity.org.apache=true      # 控制臺(console)        log4j.appender.console=org.apache.log4j.ConsoleAppender        log4j.appender.console.Threshold=DEBUG        log4j.appender.console.ImmediateFlush=true        log4j.appender.console.Target=System.err        log4j.appender.console.layout=org.apache.log4j.PatternLayout        log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 日志文件(logFile)        log4j.appender.logFile=org.apache.log4j.FileAppender        log4j.appender.logFile.Threshold=DEBUG        log4j.appender.logFile.ImmediateFlush=true        log4j.appender.logFile.Append=true        log4j.appender.logFile.File=D:/logs/log.log4j        log4j.appender.logFile.layout=org.apache.log4j.PatternLayout        log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 回滾文件(rollingFile)        log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender        log4j.appender.rollingFile.Threshold=DEBUG        log4j.appender.rollingFile.ImmediateFlush=true        log4j.appender.rollingFile.Append=true        log4j.appender.rollingFile.File=D:/logs/log.log4j        log4j.appender.rollingFile.MaxFileSize=200KB        log4j.appender.rollingFile.MaxBackupIndex=50        log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout        log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 定期回滾日志文件(dailyFile)        log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender        log4j.appender.dailyFile.Threshold=DEBUG        log4j.appender.dailyFile.ImmediateFlush=true        log4j.appender.dailyFile.Append=true        log4j.appender.dailyFile.File=D:/logs/log.log4j        log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd        log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout        log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 應用于socket        log4j.appender.socket=org.apache.log4j.RollingFileAppender        log4j.appender.socket.RemoteHost=localhost        log4j.appender.socket.Port=5001        log4j.appender.socket.LocationInfo=true        # Set up for Log Factor 5        log4j.appender.socket.layout=org.apache.log4j.PatternLayout        log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n        # Log Factor 5 Appender        log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender        log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000      # 發送日志到指定郵件        log4j.appender.mail=org.apache.log4j.net.SMTPAppender        log4j.appender.mail.Threshold=FATAL        log4j.appender.mail.BufferSize=10        log4j.appender.mail.From = xxx@mail.com        log4j.appender.mail.SMTPHost=mail.com        log4j.appender.mail.Subject=Log4J Message        log4j.appender.mail.To= xxx@mail.com        log4j.appender.mail.layout=org.apache.log4j.PatternLayout        log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 應用于數據庫        log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender        log4j.appender.database.URL=jdbc:MySQL://localhost:3306/test        log4j.appender.database.driver=com.mysql.jdbc.Driver        log4j.appender.database.user=root        log4j.appender.database.passWord=        log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')        log4j.appender.database.layout=org.apache.log4j.PatternLayout        log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      # 自定義Appender        log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender        log4j.appender.im.host = mail.cybercorlin.net        log4j.appender.im.username = username        log4j.appender.im.password = password        log4j.appender.im.recipient = corlin@cybercorlin.net        log4j.appender.im.layout=org.apache.log4j.PatternLayout        log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n      3)log4j的使用       a、引入log4j.jar包      b、在src下增加log4j.properties配置文件并進行配置      c、程序調用      具體實現舉例如下:              1、如何將某個功能作為一個獨立的日志文件進行輸出:

              如果想對不同的類輸出不同的文件(以cn.com.Test為例)

              (1)在Test.java中定義:

                  private static Log logger = LogFactory.getLog(Test.class);

          (2)配置log4j.properties文件

                  log4j.logger.cn.com.Test= DEBUG, test

                  log4j.appender.test=org.apache.log4j.FileAppender

                  log4j.appender.test.File=${myweb.root}/WEB-INF/log/test.log

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

                  log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n

          也就是讓cn.com.Test中的logger使用log4j.appender.test所做的配置。

            2、如何在同一類中輸出多個日志文件呢

              (1)先在Test.java中定義:

                 private static Log logger1 = LogFactory.getLog("myTest1");

                 private static Log logger2 = LogFactory.getLog("myTest2");

          (2)配置log4j.properties文件

                 log4j.logger.myTest1= DEBUG, test1

                 log4j.appender.test1=org.apache.log4j.FileAppender

                 log4j.appender.test1.File=${myweb.root}/WEB-INF/log/test1.log

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

                 log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n

                 log4j.logger.myTest2= DEBUG, test2

                 log4j.appender.test2=org.apache.log4j.FileAppender

                 log4j.appender.test2.File=${myweb.root}/WEB-INF/log/test2.log

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

                 log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n

           也就是在用logger時給它一個自定義的名字(如這里的"myTest1"),然后在log4j.properties中做出相應配置即可。

 

      3、這些自定義的日志默認是同時輸出到log4j.rootLogger所配置的日志中的,如何能只讓它們輸出到自己指定的日志中?

                Log4j additivity指是否輸出到頂層包定義的Appender中,如com.test中定義了一個Appender A1,而com.test.demo中又定義了一個Appender A2,則程序運行時,                com.test.demo中的類若有日志,則既會輸出到A1中,又會輸出到A2中,但有些時候,A2的處理可能比較專職化,不希望其日志摻雜到全局或高層的日志記錄中,則可以                使用additivity功能來實現。

           例:

                    下面為log4j的一個Appender配置:

                    log4j.appender.platform=org.apache.log4j.ConsoleAppender                      log4j.appender.platform.Target=System.out                      log4j.appender.platform.layout=org.apache.log4j.PatternLayout                      log4j.appender.platform.layout.ConversionPattern=[%d{ISO8601}] :%5p %c{1}:%L - %m%n                        log4j.appender.platform1=org.apache.log4j.RollingFileAppender                      log4j.appender.platform1.File=${LOG_DIR}/trace.log                      log4j.appender.platform1.MaxBackupIndex=100                      log4j.appender.platform1.MaxFileSize=5000000                      log4j.appender.platform1.layout=org.apache.log4j.PatternLayout                      log4j.appender.platform1.layout.ConversionPattern=[%d{ISO8601}] :%-5p %-x %X{user} %n     %m%n                        log4j.appender.platform2=org.apache.log4j.RollingFileAppender                      log4j.appender.platform2.File=${LOG_DIR}/trace2.log                      log4j.appender.platform2.MaxBackupIndex=100                      log4j.appender.platform2.MaxFileSize=5000000                      log4j.appender.platform2.layout=org.apache.log4j.PatternLayout                      log4j.appender.platform2.layout.ConversionPattern=[%d{ISO8601}] :%-5p %-x %X{user} %n     %m%n                        log4j.appender.platform3=org.apache.log4j.RollingFileAppender                      log4j.appender.platform3.File=${LOG_DIR}/trace3.log                      log4j.appender.platform3.MaxBackupIndex=100                      log4j.appender.platform3.MaxFileSize=5000000                      log4j.appender.platform3.layout=org.apache.log4j.PatternLayout                      log4j.appender.platform3.layout.ConversionPattern=[%d{ISO8601}] :%-5p %-x %X{user} %n     %m%n

                    log4j.logger.com.sgcc=debug, platform1                    log4j.additivity.com.sgcc.test=false                    log4j.logger.com.sgcc.test.p1=debug, platform2                    log4j.logger.com.sgcc.test.p2=debug, platform3

                    應用程序頂層包com.sgcc輸出調試級別的信息,使用的Appender為platform1,日志輸出到文件trace.log。

                    com.sgcc.test.p1包輸出調試級別的信息,使用Appender為platform2,日志輸出到文件trace2.log。

                    com.sgcc.test.p2包輸出調試級別的信息,使用Appender為platform3,日志輸出到文件trace3.log。

四、日志信息格式中幾個符號代表的特殊含義:          (1) -X號: X信息輸出時左對齊;           (2) %p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,           (3) %d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921           (4) %r: 輸出自應用啟動到輸出該log信息耗費的毫秒數           (5) %c: 輸出日志信息所屬的類目,通常就是所在類的全名           (6) %t: 輸出產生該日志事件的線程名                           (7) %l: 輸出日志事件的發生位置,,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)           (8) %%: 輸出一個"%"字符           (9) %F: 輸出日志消息產生時所在的文件名稱           (10) %L: 輸出代碼中的行號           (11) %m: 輸出代碼中指定的消息,產生的日志具體信息          (12) %n: 輸出一個回車換行符,Windows平臺為"rn ",Unix平臺為‘n’         輸出日志信息換行可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:           1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。           2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。           3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。           4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊交遠銷出的字符截掉。五、commons-logging + Log4j的使用(推薦使用)    1、為什么要使用commons-logging + Log4j             commons-logging是Apache下的開源項目,目的是為“所有的Java日志實現”提供一個統一的接口,使項目與日志實現工具解耦。但它自身的日志功能比較弱(只有一個簡單          的 SimpleLog),所以一般不會單獨使用它。Log4j的功能非常強大,是目前最主流的java日志工具。結合使用兩者可以避免使項目與log4j緊密耦合,用戶既可以輕松切換到其        他日志工具,同時又可以使用log4j的強大功能。強調一點,“同時使用commons-logging和Log4j”,與“單獨使用Log4j”相比,并不會帶來更大的學習、配置和維護成本,反而更           加簡化了我們的工作。這也是為什么“所有用到Log4j的項目一般也同時會用到commons-loggin”的原因之一吧。    2、如何使用commons-logging + Log4j         (1)引入commons-logging-1.2.jar、(log4j-1.2.17.jar)         (2)在src根目錄下放進commons-logging.properties文件,進行配置使用哪個第三方日志包。                #定義了使用的具體第三方的日志包                #org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog                org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger                #org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog                #org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogKitLogger                #org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger                #org.apache.commons.logging.Log=org.apache.commons.logging.impl.AvalonLogger         (3)程序中調用                import org.apache.commons.logging.Log;                import org.apache.commons.logging.LogFactory;                public static Log log = LogFactory.getLog(test.class);                    log.error("成功關閉鏈接");                LogFactory.getLog(test.class)的調用過程:調用該函數會啟動一個發現過程,即找出必需的底層日志記錄功能的實現,具體的發現過程在下面列出                1) 首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實現類;                 2) 如果找不到commons-logging.properties文件,則在查找是否已定義系統環境變量org.apache.commons.logging.Log,找到則使用其定義的Log實現類;                 3) 否則,查看classpath中是否有Log4j的包,如果發現,則自動使用Log4j作為日志實現類;                4) 否則,使用JDK自身的日志實現類(JDK1.4以后才有日志實現類);                5) 否則,使用commons-logging自己提供的一個簡單的日志實現類SimpleLog;

通常會見到兩種使用方法:

1、使用org.apache.commons.logging.Log類:

例如private final Log log = LogFactory.getLog(getClass());

2、直接使用log4j的Logger類:

獲得rootLogger:Logger rootLogger=Logger.getRootLogger();-

獲得自定義Logger:Logger myLogger =Logger.getLogger("log4j.logger.myLogger");-

區別

LogFactory來自common-logging包。如果用LogFactory.getLog:

優點:你可以用任何實現了通用日志接口的日志記錄器替換log4j,而程序不受影響。

缺點:需要多一個common-logging包

 

Logger來自log4j自己的包。如果用Logger.getLogger:

優點:你只需要一個log4j的jar包。

缺點:你只能用log4j作為日志記錄器,因為log4j已經硬編碼進你的系統了。

apache的common-logging包是通用日志接口,通過這個中間層,你可以通過其配置文件commons-logging.properties,來指定到底用哪個日志系統,以此增加系統的靈活性。

        Logger.getLogger和LogFactory.getLog的區別
    LogFactory來自common-logging包。如果用LogFactory.getLog,你可以用任何實現了通用日志接口的日志記錄器替換log4j,而程序不受影響。apache的common-logging包是通用日志接口,通過這個中間層,你可以隨便指定到底用哪個日志系統。增加系統的靈活性。若log4j它不存在, commons-logging 會另行選擇其它的日志實現類。 這樣保證了程序中不一定要使用log4j這個日志文件了 增強靈活性的理由: 1)首先在 classpath 下尋找自己的配置文件 commons-logging.properties ,如果找到,則使用其中定義的 Log 實現類; 2)如果找不到 commons-logging.properties 文件,則在查找是否已定義系統環境變量 org.apache.commons.logging.Log ,找到則使用其定義的 Log 實現類; 3)否則,查看 classpath 中是否有 Log4j 的包,如果發現,則自動使用 Log4j 作為日志實現類; 4)否則,使用 JDK 自身的日志實現類( JDK1.4 以后才有日志實現類); 5)否則,使用 commons-logging 自己提供的一個簡單的日志實現類 SimpleLog ; 為了簡化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不設置與 commons-logging 相關的系統環境變量,而只需將 Log4j 的 Jar 包放置到 classpash 中就可以了。這樣就很簡單地完成了 commons-logging 與 Log4j 的融合。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 红安县| 武夷山市| 红原县| 元阳县| 彭泽县| 门头沟区| 五大连池市| 开平市| 肥城市| 得荣县| 礼泉县| 伽师县| 察隅县| 宜君县| 望奎县| 阿克陶县| 高雄市| 鲁甸县| 汝城县| 侯马市| 观塘区| 湖口县| 宁强县| 越西县| 平昌县| 三都| 灯塔市| 夏津县| 县级市| 蕲春县| 汶上县| 二连浩特市| 密云县| 中方县| 鸡西市| 漾濞| 任丘市| 新泰市| 清丰县| 万州区| 石柱|