perf4j使用三(log4j集成)

          Perf4j最主要的一個好處就是可以跟log4j或者logback來性能分析和監控線上運行的程序。集成的方式主要是:自定義log4j的appenders通過標準的配置加入到log4j中去(后面會有配置的例子)。有一個要注意的地方就是需要使用log4j的1.2.14版本或者更高版本。由于我一般都是使用log4j,所以對于logback的集成我就不描述了,我覺得應該差不多的。

           

          Perf4j最重要的appender就是AsyncCoalescingStatisticsAppender,它會把一段時間內StopWatch的信息匯總到一個獨立的GroupedTimingStatistics日志信息,然后把這個獨立的信息傳給下游的appenders,比如fileappenders,這樣就可以寫到文件中去了。也可以傳給per4j的其他自定義appenders。

           

          接下來我們看一個log4j.xml的例子,有一個限制,如果要使用AsyncCoalescingStatisticsAppender就只能使用xml文件而不能使用properties文件。

           

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

           

          <log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">

              <!--

                   配置控制臺輸出

              -->

              <appender name="console" class="org.apache.log4j.ConsoleAppender">

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>

                  </layout>

              </appender>

           

              <!-- Perf4J appenders -->

              <!--

                 AsyncCoalescingStatisticsAppender收集StopWatch的日志信息并傳送到下游的文件appenders

              -->

              <appender name="CoalescingStatistics"

                        class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">

                  <!--

                       TimeSlice配置多少時間間隔去做一次匯總寫入文件中

                       默認值是 30000 ms

                  -->

                  <param name="TimeSlice" value="10000"/>

                  <appender-ref ref="fileAppender"/>

              </appender>

           

              <!-- 把匯總的perf4j的日志信息寫到perfStats.log文件中去 -->

              <appender name="fileAppender" class="org.apache.log4j.FileAppender">

                  <param name="File" value="/home/perfStats.log"/>

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%m%n"/>

                  </layout>

              </appender>

           

              <!-- Loggers -->

              <!-- 

                 配置perf4j logger

                 Additivity設置成false主要因為是不想讓代碼運行時間的日志輸出給上游appenders,即不要在控制臺輸出。

              -->

              <logger name="org.perf4j.TimingLogger" additivity="false">

                  <level value="INFO"/>

                  <appender-ref ref="CoalescingStatistics"/>

              </logger>

           

              <!-- 

                 Root logger打印所有日志,但不包含perf4j的信息。原因是在TimingLogger配置中設置了additivityfalse

              -->

              <root>

                  <level value="INFO"/>

                  <appender-ref ref="console"/>

              </root>

          </log4j:configuration>

           

           

          黃色背景是perf4j的配置信息。其他都是log4j的基本配置。下面是測試perf4j與log4j集成的代碼。

          package com.baowu.perf4j;

           

          import org.apache.log4j.Logger;

          import org.perf4j.StopWatch;

          import org.perf4j.log4j.Log4JStopWatch;

           

          public class Perf4JAppenderExample {

              public static void main (String[] args) throws Exception {

                  Logger rootLogger = Logger.getRootLogger();

                  for (int i = 0; i < 10; i++) {

                      // Log4JStopWatch默認使用org.perf4j.TimingLogger這個類

                      StopWatch stopWatch = new Log4JStopWatch();

                      //模擬代碼運行時間

                      Thread.sleep((long) (Math.random() * 1000L));

                      //打印到控制臺

                      rootLogger.info("Normal logging messages only go to the console");

                      stopWatch.lap("firstBlock");

                      Thread.sleep((long) (Math.random() * 2000L));

                      stopWatch.stop("secondBlock");

                  }

              }

          }

           

          運行代碼。

          控制臺輸出:

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

           

          文件輸出:


           

          輸出格式也可以改成CSV格式。配置:

          <appender name="fileAppender" class="org.apache.log4j.FileAppender">

                  <param name="File" value="/home/perfStats.log"/>

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%m%n"/>

                  </layout>

          </appender>

          org.apache.log4j.PatternLayout改成org.perf4j.log4j.StatisticsCsvLayout即可。

          具體的參數請查看api
          下載工程


          posted on 2012-04-16 13:59 yangpingyu 閱讀(4631) 評論(0)  編輯  收藏 所屬分類: java基礎

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          linux

          產品交互

          分析,設計,架構

          安全

          技術牛人

          數據庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 韶关市| 高淳县| 宜君县| 石柱| 安徽省| 敖汉旗| 米泉市| 太仆寺旗| 渑池县| 祥云县| 台东市| 梅河口市| 鄢陵县| 平塘县| 织金县| 罗平县| 丰都县| 汕头市| 宣恩县| 宜丰县| 闻喜县| 秦安县| 蓝田县| 合川市| 桐城市| 林口县| 阜新| 化隆| 和平县| 安达市| 青州市| 琼结县| 永清县| 罗定市| 晴隆县| 陇南市| 永年县| 鹤岗市| 陈巴尔虎旗| 龙泉市| 凤阳县|