<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    perf4j使用三(log4j集成)

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

     

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

     

    接下來(lái)我們看一個(gè)log4j.xml的例子,有一個(gè)限制,如果要使用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/">

        <!--

             配置控制臺(tái)輸出

        -->

        <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配置多少時(shí)間間隔去做一次匯總寫(xiě)入文件中

                 默認(rèn)值是 30000 ms

            -->

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

            <appender-ref ref="fileAppender"/>

        </appender>

     

        <!-- 把匯總的perf4j的日志信息寫(xiě)到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)行時(shí)間的日志輸出給上游appenders,即不要在控制臺(tái)輸出。

        -->

        <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的基本配置。下面是測(cè)試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這個(gè)類(lèi)

                StopWatch stopWatch = new Log4JStopWatch();

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

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

                //打印到控制臺(tái)

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

                stopWatch.lap("firstBlock");

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

                stopWatch.stop("secondBlock");

            }

        }

    }

     

    運(yùn)行代碼。

    控制臺(tái)輸出:

    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ù)請(qǐng)查看api
    下載工程


    posted on 2012-04-16 13:59 yangpingyu 閱讀(4635) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java基礎(chǔ)

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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類(lèi)

    隨筆檔案

    收藏夾

    linux

    產(chǎn)品交互

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

    安全

    技術(shù)牛人

    數(shù)據(jù)庫(kù)

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成人毛片免费视频| av永久免费网站在线观看| 黄页网站免费在线观看| 亚洲国产精品人久久| 一区二区三区无码视频免费福利| 久久精品国产亚洲一区二区三区| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 亚洲爆乳无码专区www| 成年女人免费视频播放77777| 亚洲一级特黄特黄的大片 | 午夜a级成人免费毛片| 亚洲熟妇无码AV不卡在线播放 | 国产精品免费观看视频| 久久精品国产精品亚洲精品| 久操视频在线免费观看| 亚洲国产成人va在线观看网址| 青娱乐免费视频在线观看| 亚洲日韩精品无码专区| av无码东京热亚洲男人的天堂| 丁香六月婷婷精品免费观看| 国精无码欧精品亚洲一区| 97国产在线公开免费观看| 亚洲AV无码一区二区三区人 | 国产精品久久久久久久久久免费| 亚洲av乱码一区二区三区按摩 | 国产成人综合亚洲亚洲国产第一页 | 亚洲一区二区久久| 免费国产精品视频| 亚洲免费观看视频| 亚洲成a人片在线看| 亚洲一区二区三区在线播放| 蜜桃成人无码区免费视频网站 | 亚洲黄色在线观看视频| 免费无码一区二区三区蜜桃大 | 一级一片免费视频播放| 亚洲综合精品香蕉久久网97| 国产精品国产免费无码专区不卡 | 亚洲中文字幕久久精品无码VA| 亚洲国产91精品无码专区| 8x8x华人永久免费视频|