perf4j集成Logback

本文介绍如何在项目中集成Perf4j进行性能监控,包括配置Logback记录性能指标,通过Perf4j生成统计图表,并在Spring Boot项目中配置GraphingServlet以展示性能监控图表。

系统如何集成per4j:

集成logback日志:
  1. logback.xml 新增下面appender: 
    <appender name="graphsFileAppender" class="ch.qos.logback.core.FileAppender">  
    	    <file>${LOG_HOME}/perf.log</file>  
    	    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
    	        <pattern>%m%n</pattern>  
    	    </encoder>  
    	</appender>
    
    <appender name="coalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
            <timeSlice>60000</timeSlice> <!-- 表示60s统计一次 -->
            <appender-ref ref="graphsFileAppender"/>
        </appender>
    	
    	<logger name="org.perf4j.TimingLogger" level="info" additivity="false">
    		<appender-ref ref="coalescingStatistics" />
    	</logger>
  2. WEB项目直接在拦截器里拦截: 
    import **.*.**
    
    
    @Component
    public class PerformanceInterceptor extends HandlerInterceptorAdapter {
    
        private static Logger logger = LoggerFactory.getLogger(PerformanceInterceptor.class);
    
        
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
    	String reqURI = request.getRequestURI();
    	if (reqURI.indexOf("css") == -1 && reqURI.indexOf("js") == -1 && reqURI.indexOf("image") == -1) {
    	    StopWatch stopWatch = new Slf4JStopWatch();
    	    request.setAttribute("stopWatch", stopWatch);
    	}
    
    	return true;
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    	StopWatch stopWatch = (StopWatch) request.getAttribute("stopWatch");
            if (stopWatch != null) {
                String reqURI = request.getRequestURI();
                if (reqURI.equals("/")) {
                    stopWatch.stop("http.index");
                } else {
                    reqURI = reqURI.replaceAll("/", ".");
                    if (reqURI.endsWith(".")) {
                        reqURI = reqURI.substring(0, reqURI.length() - 1);
                    }
                    stopWatch.stop("http" + reqURI);
                }
                stopWatch.lap("http.request.total");
            }
            super.afterCompletion(request, response, handler, ex);
        }
    
    }
  3. 打开日志文件60后显示:
    140612_Q0QB_559627.png
集成per4j图表

上面讲的是常见的使用方式。但是perf4j也提供了生成图表的方式展示,当然它是以google图标api生成的,所以在被墙的今天这一功能我们基本可以忽视,但使用方式还是说明下:    

  1. 修改logback.xml
    <appender name="graphExecutionTimes"  class="org.perf4j.logback.GraphingStatisticsAppender">
    	    <!-- GraphType:Mean(平均值), Min(最小值), Max(最大值), TPS(每秒事务数) -->
            <param name="GraphType" value="Mean"/>
            <param name="TagNamesToGraph" value="http.pluto.pos.info.search,http.pluto.pos.endorse.detail.html"/>
    	    <appender-ref ref="graphsFileAppender"/>
    	
    	</appender>
    	
    	<appender name="graphExecutionTPS" class="org.perf4j.logback.GraphingStatisticsAppender">
    	    <!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS -->
    	    <param name="GraphType" value="TPS"/>
            <!-- <param name="TagNamesToGraph" value="firstBlock,secondBlock"/> -->
    	    <appender-ref ref="graphsFileAppender"/>
    	</appender>
    
    <appender name="coalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
            <timeSlice>60000</timeSlice>
    	    <appender-ref ref="graphExecutionTimes"/>
            <appender-ref ref="graphExecutionTPS"/>
            <!-- <appender-ref ref="graphsFileAppender"/> -->
        </appender>

     

  2. 如果是WEB项目则配置好GraphingServlet,能提供页面展示图表:
    例如:我使用的是spring boot注册GraphingServlet,则可以采用 127.0.0.1:8080/test/perf4j访问了(注意 图片是访问google的api所以需要翻墙才能看得到效果
    @Bean
        public ServletRegistrationBean testServletRegistrationBean() {
    	ServletRegistrationBean registration = new ServletRegistrationBean(new GraphingServlet());
    	registration.setEnabled(true);
    	Map<String,String> map = new HashMap<String,String>();
    	map.put("graphNames", "graphExecutionTimes,graphExecutionTPS");
    	registration.setInitParameters(map);
    	registration.addUrlMappings("/perf4j");
    	return registration;
        }
    效果图如下:
    101753_5EXS_559627.png
    101809_Dj2H_559627.png

     

转载于:https://my.oschina.net/woter/blog/1511622

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值