[update] StrUtil.printStackTrace 获取异常堆栈优化
Some checks failed
yexuejc-base package jre11 / package_job (push) Failing after 38s

This commit is contained in:
maxf
2025-09-29 18:19:33 +08:00
parent 78ca6885c5
commit 80072eac11

View File

@@ -1,20 +1,27 @@
package com.yexuejc.base.util;
import com.yexuejc.base.constant.ExpCode;
import com.yexuejc.base.exception.BaseException;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.yexuejc.base.constant.ExpCode;
import com.yexuejc.base.exception.BaseException;
/**
* 字符串工具类
*
@@ -65,8 +72,7 @@ public final class StrUtil {
return ((Optional<?>) obj).isEmpty();
} else if (obj instanceof CharSequence) {
return ((CharSequence) obj).length() == 0;
} else if (obj.getClass()
.isArray()) {
} else if (obj.getClass().isArray()) {
return Array.getLength(obj) == 0;
} else if (obj instanceof Collection) {
return ((Collection<?>) obj).isEmpty();
@@ -85,9 +91,7 @@ public final class StrUtil {
* @return
*/
public static String genUUID() {
return UUID.randomUUID()
.toString()
.replaceAll("-", "");
return UUID.randomUUID().toString().replaceAll("-", "");
}
/**
@@ -122,9 +126,7 @@ public final class StrUtil {
* @return
*/
public static String genNum() {
int hashCode = UUID.randomUUID()
.toString()
.hashCode();
int hashCode = UUID.randomUUID().toString().hashCode();
StringBuilder num = new StringBuilder();
if (hashCode < 0) {
hashCode = -hashCode;
@@ -132,8 +134,7 @@ public final class StrUtil {
} else {
num.append("1");
}
return num.append(String.format("%010d", hashCode))
.substring(0, 8);
return num.append(String.format("%010d", hashCode)).substring(0, 8);
}
/**
@@ -340,10 +341,7 @@ public final class StrUtil {
for (String key : keys) {
Object value = sortedParams.get(key);
if (isNotEmpty(key) && isNotEmpty(value)) {
content.append(index == 0 ? "" : "&")
.append(key)
.append("=")
.append(value);
content.append(index == 0 ? "" : "&").append(key).append("=").append(value);
++index;
}
}
@@ -464,17 +462,14 @@ public final class StrUtil {
if (cause != null) {
StringBuilder msg = new StringBuilder();
if (isNotEmpty(cause.getMessage())) {
msg.append(cause.getMessage())
.append(NEW_LINE);
msg.append(cause.getMessage()).append(NEW_LINE);
}
String causedMsg = printStackTrace(cause, (eMessage) -> {
if (isNotEmpty(eMessage)) {
msg.append(eMessage)
.append(NEW_LINE);
msg.append(eMessage).append(NEW_LINE);
}
});
return msg.append(causedMsg)
.toString();
return msg.append(causedMsg).toString();
}
return "";
}
@@ -493,30 +488,24 @@ public final class StrUtil {
private static String printStackTrace(Throwable cause, Consumer<String> consumer) {
if (cause != null) {
String err = "\tat %s.%s(%s.java:%d)";
StringBuilder sb = new StringBuilder();
String cClass = cause.getClass()
.getName();
String cClass = cause.getClass().getName();
String eMessage = cause.getMessage();
StackTraceElement[] stackTrace = cause.getStackTrace();
Throwable caused = cause.getCause();
while (caused != null) {
cClass = caused.getClass()
.getName();
eMessage = caused.getMessage();
stackTrace = caused.getStackTrace();
caused = caused.getCause();
consumer.accept(eMessage);
Throwable c = cause.getCause();
while (c != null) {
cClass = c.getClass().getName();
eMessage = c.getMessage();
stackTrace = c.getStackTrace();
c = c.getCause();
}
sb.append("Caused by: ")
.append(cClass)
.append(": ")
.append(eMessage)
.append(NEW_LINE);
sb.append("Caused by: ").append(cClass).append(": ").append(eMessage).append(System.lineSeparator());
for (StackTraceElement element : stackTrace) {
sb.append("\tat ");
sb.append(String.format(ERROR_MESSAGE_FORMAT, element.getClassName(), element.getMethodName(), element.getFileName(),
element.getLineNumber()));
sb.append(NEW_LINE);
String className = element.getClassName();
String simpleClassName = className.substring(className.lastIndexOf('.') + 1);
sb.append(String.format(err, className, element.getMethodName(), simpleClassName, element.getLineNumber()))
.append(System.lineSeparator());
}
return sb.toString();
}