SLF4J-프로파일 링

SLF4J Distribution은 slf4j-ext.jar 여기에는 프로파일 링, 확장 로깅, 이벤트 로깅 및 Java 에이전트를 사용한 로깅과 같은 기능에 대한 API가 포함됩니다.

프로파일 링

때때로 프로그래머는 메모리 사용, 시간 복잡도 또는 프로그램에 대한 특정 명령 사용과 같은 일부 속성을 측정하여 해당 프로그램의 실제 기능을 측정하려고합니다. 프로그램에 대한 이러한 종류의 측정을 프로파일 링이라고합니다. 프로파일 링은 동적 프로그램 분석을 사용하여 이러한 측정을 수행합니다.

SLF4J는 Profilerorg.slf4j.profiler프로파일 링 목적을위한 패키지. 이것은 가난한 사람의 프로파일 러로 알려져 있습니다. 이를 사용하여 프로그래머는 장시간 작업을 수행하는 데 걸리는 시간을 알 수 있습니다.

Profiler 클래스를 사용하여 프로파일 링

프로파일 러에는 스톱워치와 하위 스톱워치가 포함되어 있으며 프로파일 러 클래스에서 제공하는 메서드를 사용하여 시작 및 중지 할 수 있습니다.

프로파일 러 클래스를 사용하여 프로파일 링을 계속하려면 다음 단계를 따르십시오.

1 단계-프로파일 러 클래스 인스턴스화

프로파일 러의 이름을 나타내는 문자열 값을 전달하여 Profiler 클래스를 인스턴스화합니다. Profiler 클래스를 인스턴스화하면 글로벌 스톱워치가 시작됩니다.

//Creating a profiler
Profiler profiler = new Profiler("Sample");

2 단계-어린이 스톱워치 시작

우리가 호출 할 때 start() 메서드는 새 하위 스톱워치 (이름이 지정됨)를 시작하고 이전 하위 스톱워치 (또는 시간 계기)를 중지합니다.

호출 start() 의 방법 Profiler 생성 할 하위 스톱워치의 이름을 나타내는 String 값을 전달하여 클래스.

//Starting a child stopwatch and stopping the previous one.
profiler.start("Task 1");
obj.demoMethod1();

이러한 스톱워치를 만든 후 작업을 수행하거나 작업을 실행하는 메서드를 호출 할 수 있습니다.

3 단계 : 다른 어린이 스톱워치 시작 (원하는 경우)

필요한 경우 다음을 사용하여 다른 스톱워치를 만듭니다. start()방법 및 필요한 작업을 수행합니다. 그렇게하면 새로운 스톱워치를 시작하고 이전 스톱워치를 중지합니다 (예 : 작업 1).

//Starting another child stopwatch and stopping the previous one.
profiler.start("Task 2");
obj.demoMethod2();

4 단계 : 시계 중지

우리가 호출 할 때 stop() 메서드를 사용하면 최근 하위 스톱워치와 글로벌 스톱워치를 중지하고 현재 시간 계측기를 반환합니다.

// Stopping the current child stopwatch and the global stopwatch.
TimeInstrument tm = profiler.stop();

5 단계 : 시간 측정기의 내용을 인쇄합니다.

다음을 사용하여 현재 시간 측정기의 내용을 인쇄합니다. print() 방법.

//printing the contents of the time instrument
tm.print();

다음 예제는 SLF4J의 Profiler 클래스를 사용한 프로파일 링을 보여줍니다. 여기서 우리는 1에서 10000까지 숫자의 제곱의 합을 인쇄하고 1에서 10000까지 숫자의 합을 인쇄하는 두 가지 샘플 작업을 수행했습니다.이 두 작업에 걸리는 시간을 구하려고합니다.

import org.slf4j.profiler.Profiler;
import org.slf4j.profiler.TimeInstrument;

public class ProfilerExample {
   public void demoMethod1(){
      double sum = 0;
      for(int i=0; i< 1000; i++){
         sum = sum+(Math.pow(i, 2));
      }
      System.out.println("Sum of squares of the numbers from 1 to 10000: "+sum);
   }
   public void demoMethod2(){
      int sum = 0;
      for(int i=0; i< 10000; i++){
         sum = sum+i;
      }
      System.out.println("Sum of the numbers from 1 to 10000: "+sum);
   }
   public static void main(String[] args) {
      ProfilerExample obj = new ProfilerExample();

      //Creating a profiler
      Profiler profiler = new Profiler("Sample");

      //Starting a child stop watch and stopping the previous one.
      profiler.start("Task 1");
      obj.demoMethod1();

      //Starting another child stop watch and stopping the previous one.
      profiler.start("Task 2");
      obj.demoMethod2();
 
      //Stopping the current child watch and the global watch.
      TimeInstrument tm = profiler.stop();

      //printing the contents of the time instrument
      tm.print();
   }
}

산출

실행시 위의 프로그램은 다음과 같은 출력을 생성합니다.

Sum of squares of the numbers from 1 to 10000: 3.328335E8
Sum of the numbers from 1 to 10000: 49995000
+ Profiler [BASIC]
|-- elapsed time [Task 1] 2291.827 microseconds.
|-- elapsed time [Task 2] 225.802 microseconds.
|-- Total [BASIC] 3221.598 microseconds.

프로파일 러 정보 로깅

이 정보를 기록하기 위해 프로파일 러의 결과를 인쇄하는 대신 다음을 수행해야합니다.

  • 다음을 사용하여 로거를 만듭니다. LoggerFactory 수업.

  • Profiler 클래스를 인스턴스화하여 프로파일 러를 만듭니다.

  • 생성 된 로거 개체를에 전달하여 로거를 프로파일 러에 연결합니다. setLogger() 의 방법 Profiler 수업.

  • 마지막으로 인쇄하는 대신 다음을 사용하여 프로파일 러의 정보를 기록합니다. log() 방법.

다음 예제에서는 이전 예제와 달리 (인쇄 대신) 시간 계측기의 내용을 기록하려고합니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.profiler.Profiler;
import org.slf4j.profiler.TimeInstrument;

public class ProfilerExample_logger {
   public void demoMethod1(){
      double sum = 0;
      for(int i=0; i< 1000; i++){
         sum = sum+(Math.pow(i, 2));
      }
      System.out.println("Sum of squares of the numbers from 1 to 10000: "+sum);
   }
   public void demoMethod2(){
      int sum = 0;
      for(int i=0; i< 10000; i++){
         sum = sum+i;
      }
      System.out.println("Sum of the numbers from 1 to 10000: "+sum);
   }
   public static void main(String[] args) {
      ProfilerExample_logger obj = new ProfilerExample_logger();

      //Creating a logger
      Logger logger = LoggerFactory.getLogger(ProfilerExample_logger.class);

      //Creating a profiler
      Profiler profiler = new Profiler("Sample");

      //Adding logger to the profiler
      profiler.setLogger(logger);

      //Starting a child stop watch and stopping the previous one.
      profiler.start("Task 1");
      obj.demoMethod1();

      //Starting another child stop watch and stopping the previous one.
      profiler.start("Task 2");
      obj.demoMethod2();

      //Stopping the current child watch and the global watch.
      TimeInstrument tm = profiler.stop();

      //Logging the contents of the time instrument
      tm.log();
   }
}

산출

실행시 위의 프로그램은 다음과 같은 출력을 생성합니다.

Sum of squares of the numbers from 1 to 10000: 3.328335E8
Sum of the numbers from 1 to 10000: 49995000