谢谢

1 stranchong Oct 25, 2023 log.error("Request to {} failed, uuid is {}.", uri, uuid, exception) ========== 这样异常堆栈也能打印出来 |
2 iminto Oct 25, 2023 via Android 楼主写法给我看笑了。。。log 本来就有格式化功能,再格式化一次。。 |
3 chendy Oct 25, 2023 其实如果是 100% 会打印出来的 log ,就不需要 format 了,直接 + 拼接就行 想优雅点就按照经验先 new 一个长度差不多够用的 StringBuilder 避免扩容 再优雅点就把这个 StringBuilder 扔 ThreadLocal 里缓存住(不一定有性能提升,可能 ThreadLocal 查找的时间都够把字符串拼出来了 另外就是格式问题,楼主目前的格式只考虑给人看没考虑给机器解析,可以考虑调整一下,加一些特殊的分隔符,便于统一处理日志做数据分析和预警之类的 |
5 N9f8Pmek6m8iRWYe Oct 25, 2023 竟无语凝噎 |
6 tramm Oct 25, 2023 楼主从 C 那边转过来的? |
7 ZhanLangCN Oct 25, 2023 uuid 如果是追踪调用链用的话可以存在 MDC, 那日志直接就 |
8 ZhanLangCN Oct 25, 2023 log.error("Request to {} failed.", uri, exception) |
9 workingonescape Oct 25, 2023 绷不住了 |
10 qcbf111 Oct 25, 2023 log.error($"Request to {uri} failed, uuid is {uuid}.", exception) c#真的是越用越先进! |
11 tedzhou1221 Oct 25, 2023 ```java public StringFormattedMessage(final Locale locale, final String messagePattern, final Object... arguments) { this.locale = locale; this.messagePattern = messagePattern; this.argArray = arguments; if (arguments != null && arguments.length > 0 && arguments[arguments.length - 1] instanceof Throwable) { this.throwable = (Throwable) arguments[arguments.length - 1]; } } ``` log4j 的 log.error 的实现中,找到 StringFormattedMessage 类,会判断最后一个是不是 Throwable 。 所以调用 这个接口也是可以打印异常堆栈 public void error(String format, Object... arguments); 调用这个也行 public void error(String msg, Throwable t); |
12 liaopen123 Oct 25, 2023 log.error(() -> String.format("Request to %s failed, uuid is %s.", uri, uuid), exception); chatgpt 回答的 |
13 qjbcnrs Oct 25, 2023 |
14 iold Oct 25, 2023 不怎么写 Java ,但是 idea 会提示你这写法可以优化吧?? |
17 tedzhou1221 Oct 25, 2023 @iold #14 我使用的 idea 2023.2.2 版本,没有这种提示。 楼主的问题主要是:(个人猜测) 看到 error 接口,以为只有这个才会打印异常堆栈, public void error(String msg, Throwable t); 以为这个接口 public void error(String format, Object... arguments); 没有 Throwable 作为入参,认为不会打印异常堆栈。 包括我以前也是这样认为。同样很多年前也遇到过 log.error 不打印异常堆栈的情况。 |