Java 로그 프레임워크 성능 비교
앞의 몇 장에서 필자는 각각log4j,logback,log4j2 3대 로그 실현 구조를 소개했다.
다음은 구체적인 데이터로 어느 로그 프레임워크의 성능이 더 좋은지 비교해 봅시다!
단선정: 외순환 100회, 내순환 100000회;
다중 스레드: 100개의 스레드를 켜고 한 스레드당 100000회 실행;
1.1 테스트 코드:
(1)log4j:
public class log4jDemo {
Logger logger = Logger.getLogger(log4jDemo.class);
@Test
public void testThread() throws InterruptedException {
int THREAD_NUM = 100;
final int LOOP_NUM = 100000;
final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);
long start = System.currentTimeMillis();
for(int x= 0;x < THREAD_NUM;x++){
new Thread(new Runnable() {
public void run() {
for (int y = 0; y < LOOP_NUM; y++) {
logger.info("Info Message!");
}
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void test() throws InterruptedException {
int X_NUM = 100;
int Y_NUM = 100000;
long start = System.currentTimeMillis();
for(int x=0;x < X_NUM;x++) {
for (int y = 0; y < Y_NUM; y++) {
logger.info("Info Message!");
}
}
System.out.print(System.currentTimeMillis() - start);
}
}
(2)logback:
public class logbackDemo {
Logger logger = LoggerFactory.getLogger(logbackDemo.class);
@Test
public void testThread() throws InterruptedException {
int THREAD_NUM = 100;
final int LOOP_NUM = 100000;
final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);
long start = System.currentTimeMillis();
for(int x= 0;x < THREAD_NUM;x++){
new Thread(new Runnable() {
public void run() {
for (int y = 0; y < LOOP_NUM; y++) {
logger.info("Info Message!");
}
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void test() {
int X_NUM = 100;
int Y_NUM = 100000;
long start = System.currentTimeMillis();
for(int x=0;x
(3)log4j2:
public class log4j2Demo {
private Logger logger = LogManager.getLogger(log4j2Demo.class);
@Test
public void testThread() throws InterruptedException {
int THREAD_NUM = 100;
final int LOOP_NUM = 100000;
final CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);
long start = System.currentTimeMillis();
for(int x= 0;x < THREAD_NUM;x++){
new Thread(new Runnable() {
public void run() {
for (int y = 0; y < LOOP_NUM; y++) {
logger.info("Info Message!");
}
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void test() throws InterruptedException {
int X_NUM = 100;
int Y_NUM = 100000;
long start = System.currentTimeMillis();
for(int x=0;x
1.2 구성 파일:
(1)log4j:
(2)logback:
e:/log.out
true
%d{HH:mm:ss.SSS} %p %c - %m%n
e:/log.out
true
false
8192
%d{HH:mm:ss.SSS} %p %c - %m%n
0
128
(3)log4j2:
<
%d{HH:mm:ss.SSS} %p %c - %m%n
%d{HH:mm:ss.SSS} %p %c - %m%n
1.3 결과 비교(ms)
필자가 단선정, 다선정 두 가지 상황에서 진행한 테스트!
다중 스레드든 단일 스레드든 캐시를 사용하는 상황에서 시스템 성능이 크게 향상되었다.
단일 스레드 상황에서 비교해 보면 비동기 Appender를 사용하는 것은 성능에 큰 향상이 없다!
특히log4j2에서 다중 스레드 상황에서 동기화logger에 비해 비동기logger는 시스템의 성능을 더욱 향상시키지 않았고 둘은 막상막하이다.
그러나 다른 상황에 있어 비동기logger는 비교적 큰 향상을 보였다!
(1) , ,
log4j:29772、29959、30911
logback:25423、24552、26006
log4j2:37927、38240、40164
(2) , ,
log4j:9858、9677、9665
logback:5561、5604、5611
log4j2:5782、5505、5499
(3) , appender, ,
log4j:29683、29929、29385
logback:33102、31779、30516
log4j2:39298、39562、41872
(4) , appender, ,
log4j:10110、10068、10177
logback:8753、9112、8922
log4j2:8692、8400、8252
(1) , ,
log4j:38541、37791、38366
logback:35644、35463、35442
log4j2:38544、38746、38706
(2) , ,
log4j:13296、12938、12686
logback:6547、6294、6576
log4j2:5596、5423、5421
(3) , appender, ,
log4j:30844、32088、30734
logback:44203、42191、43228
log4j2:46804、46034、46232
(4) , appender, ,
log4j:10422、10204、10495
logback:40249、40437、40173
log4j2:7832、8447、8660
(5) , logger, ,
log4j2:40555、40245、40325
(6) , logger, ,
log4j2:5319、5407、5305
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.