perf4j使用三(log4j集成)

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

           

          Perf4j最重要的appender就是AsyncCoalescingStatisticsAppender,它會把一段時間內(nèi)StopWatch的信息匯總到一個獨(dú)立的GroupedTimingStatistics日志信息,然后把這個獨(dú)立的信息傳給下游的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配置多少時間間隔去做一次匯總寫入文件中

                       默認(rèn)值是 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設(shè)置成false主要因?yàn)槭遣幌胱尨a運(yùn)行時間的日志輸出給上游appenders,即不要在控制臺輸出。

              -->

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

                  <level value="INFO"/>

                  <appender-ref ref="CoalescingStatistics"/>

              </logger>

           

              <!-- 

                 Root logger打印所有日志,但不包含perf4j的信息。原因是在TimingLogger配置中設(shè)置了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默認(rèn)使用org.perf4j.TimingLogger這個類

                      StopWatch stopWatch = new Log4JStopWatch();

                      //模擬代碼運(yùn)行時間

                      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");

                  }

              }

          }

           

          運(yùn)行代碼。

          控制臺輸出:

          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即可。

          具體的參數(shù)請查看api。
          下載工程


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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          linux

          產(chǎn)品交互

          分析,設(shè)計(jì),架構(gòu)

          安全

          技術(shù)牛人

          數(shù)據(jù)庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岳池县| 农安县| 嘉义县| 江阴市| 阜平县| 洪江市| 融水| 乌拉特后旗| 漠河县| 咸丰县| 纳雍县| 安康市| 大港区| 时尚| 平潭县| 四平市| 舒城县| 遂宁市| 南木林县| 阿瓦提县| 棋牌| 定日县| 尼木县| 华安县| 马公市| 衡南县| 长海县| 吐鲁番市| 成武县| 黄龙县| 淮北市| 大邑县| 扎兰屯市| 南和县| 宁化县| 会同县| 简阳市| 吴堡县| 祥云县| 玉屏| 镇坪县|