in common/src/main/java/org/apache/seata/common/util/StringUtils.java [180:289]
public static String toString(final Object obj) {
if (obj == null) {
return "null";
}
//region Convert simple types to String directly
if (obj instanceof CharSequence) {
return "\"" + obj + "\"";
}
if (obj instanceof Character) {
return "'" + obj + "'";
}
if (obj instanceof Date) {
Date date = (Date)obj;
long time = date.getTime();
String dateFormat;
if (date.getHours() == 0 && date.getMinutes() == 0 && date.getSeconds() == 0 && time % 1000 == 0) {
dateFormat = "yyyy-MM-dd";
} else if (time % (60 * 1000) == 0) {
dateFormat = "yyyy-MM-dd HH:mm";
} else if (time % 1000 == 0) {
dateFormat = "yyyy-MM-dd HH:mm:ss";
} else {
dateFormat = "yyyy-MM-dd HH:mm:ss.SSS";
}
return new SimpleDateFormat(dateFormat).format(obj);
}
if (obj instanceof Enum) {
return obj.getClass().getSimpleName() + "." + ((Enum)obj).name();
}
if (obj instanceof Class) {
return ReflectionUtil.classToString((Class<?>)obj);
}
if (obj instanceof Field) {
return ReflectionUtil.fieldToString((Field)obj);
}
if (obj instanceof Method) {
return ReflectionUtil.methodToString((Method)obj);
}
if (obj instanceof Annotation) {
return ReflectionUtil.annotationToString((Annotation)obj);
}
//endregion
//region Convert the Collection and Map
if (obj instanceof Collection) {
return CollectionUtils.toString((Collection<?>)obj);
}
if (obj.getClass().isArray()) {
return ArrayUtils.toString(obj);
}
if (obj instanceof Map) {
return CollectionUtils.toString((Map<?, ?>)obj);
}
//endregion
//the jdk classes
if (obj.getClass().getClassLoader() == null) {
return obj.toString();
}
return CycleDependencyHandler.wrap(obj, o -> {
StringBuilder sb = new StringBuilder(32);
// handle the anonymous class
String classSimpleName;
if (obj.getClass().isAnonymousClass()) {
if (!obj.getClass().getSuperclass().equals(Object.class)) {
classSimpleName = obj.getClass().getSuperclass().getSimpleName();
} else {
classSimpleName = obj.getClass().getInterfaces()[0].getSimpleName();
}
// Connect a '$', different from ordinary class
classSimpleName += "$";
} else {
classSimpleName = obj.getClass().getSimpleName();
}
sb.append(classSimpleName).append("(");
final int initialLength = sb.length();
// Gets all fields, excluding static or synthetic fields
Field[] fields = ReflectionUtil.getAllFields(obj.getClass());
for (Field field : fields) {
field.setAccessible(true);
if (sb.length() > initialLength) {
sb.append(", ");
}
sb.append(field.getName());
sb.append("=");
try {
Object f = field.get(obj);
if (f == obj) {
sb.append("(this ").append(f.getClass().getSimpleName()).append(")");
} else {
sb.append(toString(f));
}
} catch (Exception ignore) {
}
}
sb.append(")");
return sb.toString();
});
}