请问这条 Java 日志有更优雅的写法吗? log.error(String.format("Request to %s failed, uuid is %s.",uri, uuid),exception)

2023-10-24 23:03:56 +08:00
 BraveXaiver
谢谢
2859 次点击
所在节点    Java
28 条回复
qcbf111
2023-10-25 12:14:15 +08:00
@kaedei 你可以看下反编译的代码,事实上 字符串模板不仅写着舒服,性能还算是任何语言最高的字符串拼接做法。在很老的版本做法简单本质就是,string.format("{} aa{}", uri, uuid)这样。
而较新版本已经做到没有任何一次额外的临时分配了。
julyclyde
2023-10-25 12:24:53 +08:00
@stranchong 不明白。俩花括号怎么输出三个变量呢?
BaseException
2023-10-25 12:48:21 +08:00
@julyclyde #22 第三个是 print 了 stacktrace ,上面有人贴了源码,throwable ,源码里用的 object... 对象数组的
guoziq09
2023-10-25 14:20:03 +08:00
@bk201 %s,%d,%l ,这些不是通用的 format 占位符吗?
nothingistrue
2023-10-25 14:51:28 +08:00
@stranchong #1
@iminto #2
@cslive #4
Slf4j 没有这种重载方式。

@tedzhou1221 #11
Log4j 的实现,不能代表 Slf4j 的接口定义,除非你明确用得是 Log4j 不是 Slf4j

事实上来说,没有比楼主原来那个语句更优雅的了。当然,如果再极限追求性能,还是得改成 if(log.isErrorEnable()){ log.error ....}
Richared
2023-10-25 15:37:03 +08:00
代码怎么写不重要,因为你看的是日志,不是打印日志的代码,我习惯是每个链路加一个跟踪号。排查起来简单。
Richared
2023-10-25 15:41:26 +08:00
@Richared 补充一下,Slf4j void error(String var1, Throwable var2); 会自动格式化,输出堆栈信息,log.error("aa:{},bb{},id,data,e" 就可以了。当然你不确定你的日志框架是啥,可以自己写个 utils 。还是上边那句话,怎么写不重要。你就+拼问题也不大。保证日志输出标准,是给人看的就可以了。
lleiwang
2023-10-26 10:07:22 +08:00
@liaopen123 这 GTP 还怪好嘞,异步打印。。^_^

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/985087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX