ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

PerformanceMonitorInterceptorの使い方

Springであるメソッドがリクエストされてからレスポンスを返却するまでの経過時間を計測したいときに使えるのがPerformanceMonitorInterceptorです。

コード

penguin.controller.ui.PictureControllerクラスのすべてのメソッドが実行されたときに経過時間を出力する設定

package penguin.config;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.aop.Advisor;
import org.springframework.aop.interceptor.PerformanceMonitorInterceptor;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
@Aspect
public class PictureControllerPerfLogConfig {
    @Bean
    public PerformanceMonitorInterceptor performanceMonitorInterceptor() {
            return new PerformanceMonitorInterceptor();
    }

    @Bean
    public Advisor pictureControllerMonitorAdvisor(PerformanceMonitorInterceptor performanceMonitorInterceptor) {
        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
        pointcut.setExpression("execution(public * penguin.controller.ui.PictureController.*(..))");
        return new DefaultPointcutAdvisor(pointcut, performanceMonitorInterceptor);
    }
}

PerformanceMonitorInterceptorはTRACEレベルでログを出力するので、ログレベルの設定が必要になります。
application.propertiesファイルに以下の内容を追加します。

logging.level.org.springframework.aop.interceptor.PerformanceMonitorInterceptor=TRACE

出力内容

★の部分が追加されました。

2020-10-04 23:07:39.964  INFO 7792 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-04 23:07:40.048  INFO 7792 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2020-10-04 23:07:40.835  INFO 7792 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '/garden'
2020-10-04 23:07:40.838  INFO 7792 --- [           main] penguin.Application                       : Started Application in 5.598 seconds (JVM running for 6.883)
2020-10-04 23:07:44.403  INFO 7792 --- [nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/garden]        : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-10-04 23:07:44.709 TRACE 7792 --- [nio-8080-exec-1] o.s.a.i.PerformanceMonitorInterceptor    : StopWatch 'penguin.controller.ui.PictureController.list': running time = 258040800 ns ★

以上