Log API 性能总结
2016-03-19 15:34
337 查看
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"}
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"}
相关文章推荐
- innodb_flush_log_at_trx_commit不同参数值下的性能测试
- 35 个 Java 代码性能优化总结
- hbase远程api调用, 远程连接开发,环境构建相关问题总结
- 一次关于mongodb性能踩坑的总结
- paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
- SQL SERVER中一些常见性能问题的总结
- 日志总结---从common-log、self4j、log4j到logback、logstash
- Java程序性能优化总结
- Java I/O API之性能分析 (上)
- Sql server一些常见性能问题的总结
- Sql server一些常见性能问题的总结()
- 数据库性能优化常用sql脚本总结
- 跨平台的日志输出的API-Log
- Sql server一些常见性能问题的总结
- 常用树类数据结构总结-二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的性能分析
- Java程序性能优化—十年码农总结的编程小技巧
- linux 性能分析常规逻辑和手段总结
- Firebug Console API 与命令行: Console.log
- 利用Log parse 分析Exchange 性能并产生相应报表!(1)-Protocol 协议 Log!(2)
- JVM 性能监控与常用工具学习总结