话不多说,先上代码:
/**
* @Project: sagtest
* @Title: TestLog.java
* @Package: com.bestpay.sag.junit.test
* @Description: TODO
* @Author: weizhi2018 weizs_999@163.com
* @CreateDate: 2013-8-9 下午03:59:10
* @Copyright: 2013
* @Version: V1.0
*/
package com.bestpay.sag.junit.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @ClassName TestLog
* @Description TODO
* @Author weizhi2018
* @Date 2013-8-9 下午03:59:10
*
*/
public class TestLog {
private static Logger LOGBACK = LoggerFactory.getLogger(TestLog.class);
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger
.getLogger(TestLog.class);
private static LogUtil LOGUTIL = LogUtil.getLogger(TestLog.class);
/**
* @Title main
* @Description TODO
* @Author weizhi2018
* @param @param args
* @return void
* @throws
*/
public static void main(String[] args) {
String logstr = "abcdefg1234567890,.;'[]-==@!@#$%^&*()_+河南";
int lines = 10000;
long startTimeLogback = System.currentTimeMillis();
for (int i = 0; i < lines; i++) {
LOGBACK.info(logstr);
}
long endTimeLogback = System.currentTimeMillis();
long startTimeLog = System.currentTimeMillis();
for (int i = 0; i < lines; i++) {
LOG.info(logstr);
}
long endTimeLog = System.currentTimeMillis();
long startTimeLogUtil = System.currentTimeMillis();
for (int i = 0; i < lines; i++) {
LOGUTIL.info(logstr);
}
long endTimeLogUtil = System.currentTimeMillis();
LOGBACK.info("日志长度:{}", logstr.length());
LOGBACK.info("日志行数:{}", lines);
LOGBACK.info("Logback耗时(ms):{}", endTimeLogback - startTimeLogback);
LOGBACK.info("Log4j耗时(ms):{}", endTimeLog - startTimeLog);
LOGBACK.info("LogUtil耗时(ms):{}", endTimeLogUtil - startTimeLogUtil);
}
}
LogUtil.java
/**
* @Project: TestLog
* @Title: LogUtil.java
* @Package: com.bestpay.sag.junit.test
* @Description: TODO
* @Author: weizhi2018 weizs_999@163.com
* @CreateDate: 2013-8-9 下午04:40:43
* @Copyright: 2013
* @Version: V1.0
*/
package com.bestpay.sag.junit.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @ClassName LogUtil
* @Description TODO
* @Author weizhi2018
* @Date 2013-8-9 下午04:40:43
*
*/
public class LogUtil {
private Logger instance;
public static LogUtil getLogger(Class clazz){
LogUtil logUtil = new LogUtil();
logUtil.setInstance(LoggerFactory.getLogger(clazz));
return logUtil;
}
public void info(String arg0){
this.getInstance().info(arg0);
}
public void info(String arg0,Object arg1){
this.getInstance().info(arg0,arg1);
}
public Logger getInstance() {
return instance;
}
public void setInstance(Logger instance) {
this.instance = instance;
}
}
输出结果:
2013-08-09 10:59:16:[INFO] [main] 4865 日志长度:41
2013-08-09 10:59:16:[INFO] [main] 4865 日志行数:10000
2013-08-09 10:59:16:[INFO] [main] 4865 Logback耗时(ms):860
2013-08-09 10:59:16:[INFO] [main] 4865 Log4j耗时(ms):2441
2013-08-09 10:59:16:[INFO] [main] 4865 LogUtil耗时(ms):1111
经比对可发现,log4j 与 logback 打印相同日志的时间在3:1
而且进一步验证发,日志长度越长,两者比例会变小,在100个字符长度时,log4j:logback = 3:2 左右