Log API 性能总结

Log的三种写法:

1. LOGGER.info(String.format("aaaaaa%sbbbbbb%sccccc%sdddddd%s", "11", "22", "33", "44"));
2. LOGGER.info("aaa{}", "bb");
3. LOGGER.info("aaaaaa"+"1111"+"bbbbbb"+"2222"+"ccccc"+"33333"+"dddddd"+"44444");

1. 第一种的底层实现:要执行String.format方法,有2个for循环来解析%s

2. 第二种的底层实现:
public void info(String format, Object arg) {
if (logger.isInfoEnabled()) {
FormattingTuple ft = MessageFormatter.format(format, arg);
logger.log(FQCN, Level.INFO, ft.getMessage(), ft.getThrowable());
}
}

3. 第三种的底层实现:先拼接字符串,然后在调用ogger.log(FQCN, Level.INFO, msg, null);


性能比较:
第一种性能最差,因为需要调用String.format方法做2次for循环(有parse方法要遍历String.length次)

第二种和第三中性能各有千秋:
1)第二种:当当前Log级别为大于等于info的时候
他要调用MessageFormatter.format,性能上略低于字符串+的拼接
2)第三种:如果当前log级别为error, 这时候第二种性能更好
因为先执行logger.isInfoEnabled(),返回为false之后,则不用做字符串的拼接


[160127 19:50:12,398:com.rcloud.msgLog.LogMsgManager.setLog(LogMsgManager.java:44)] [INFO] [SandBox-akka.actor.default-dispatcher-20] | {"appId":"pkfcgjstfdnb8","fromUserId":"tt_10000","targetId":"9","targetType":4,"GroupId":"9","classname":"RC:TxtMsg","content":{"content": "[\u6570\u636e]", "extra": "wqdsw6VoXETCgFDDusKSwpfDnsOHM1bCtwjDvSnDiirDpsO/I8K0Wlthb8KebsK9McK4PjFNdFcEw63DmxVMBBPDjhTDicO+fXnDh8KMw7DDtcO8cwPCpWnDq8KlwoDDgw5Sf07Cv8K5w6YbGCoMw4QsN8OpbsKUwp3CmlNmw4PClMODwoDDgcKZTyhww7XDvi/CiMOdT8K/wqvDgSDCuMOgw57Cl8OWaWnCqMKBHsKgDXjDqyzCtmbDp8O0J8KsJArCnWXDmsK4wqrClsORwrRsw7gRGmR5wqcPa8O+a8KeVllJYcKKwqNQw77CphI="},"dateTime":"2016-01-27 19:50:12.397","msgUID":"5985-QRAL-KG00-001P"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值