2020-08-11 10:47:59 +08:00

167 lines
4.3 KiB
Java

package com.lz.common.utils;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
/****
* 日志工具类,升级版
*/
@Slf4j
public class LogUtils {
/**
* 不需要传递参数
*
* @param msg
*/
public static void info(String msg) {
log.info(msg);
}
/**
* 不需要传递参数
*
* @param msg
*/
public static void all(String msg) {
Throwable throwable = new Throwable();
StringBuffer sb = getStringBuffer(msg, throwable, -1);
log.info(sb.toString());
}
/**
* 不需要传递参数
*
* @param msg
*/
public static void info(String msg, int level) {
Throwable throwable = new Throwable();
StringBuffer sb = getStringBuffer(msg, throwable, level);
log.info(sb.toString());
}
public static void error(Exception e) {
Throwable throwable = new Throwable();
StringBuffer sb = getStringBuffer("", throwable, getLevel(throwable));
log.error(sb.append("error=").toString(), e);
}
public static void error(String msg, Exception e) {
Throwable throwable = new Throwable();
StringBuffer sb = getStringBuffer(msg, throwable, getLevel(throwable));
log.error(sb.append("error=").toString(), e);
}
public static int getLevel(Throwable throwable) {
return throwable.getStackTrace().length - 1;
}
private static StringBuffer getStringBuffer(String msg, Throwable throwable, int level) {
StringBuilder cml = getRelate(throwable, level);
String result = cml.toString().trim();
if (result.endsWith("=>")) {
result = result.substring(0, result.lastIndexOf("=>"));
}
StringBuffer sb = appendSb(" ", result, " ", msg);
return sb;
}
public static StringBuilder getRelate(Throwable throwable, int level) {
StringBuilder cml = new StringBuilder();
if (level <= 0 || level >= throwable.getStackTrace().length) {
level = throwable.getStackTrace().length - 1;
}
getLationByN(throwable, cml, level);
return cml;
}
private static void getLationByN(Throwable throwable, StringBuilder cml, int n) {
for (int i = n; i > 0; i--) {
getNLation(throwable, cml, i);
cml.append(" => ");
}
}
private static void getNLation(Throwable throwable, StringBuilder cml, int i) {
String method = throwable.getStackTrace()[i].getMethodName();
cml.append(method);
cml.append(":");
cml.append(getClassName(throwable.getStackTrace()[i].getClassName()));
cml.append(":");
cml.append(throwable.getStackTrace()[i].getLineNumber());
}
public static String dealException(Exception e) {
StringWriter sw = null;
String str = null;
try {
e.printStackTrace();
sw = new StringWriter();
//将出错的栈信息输出到printWriter中
e.printStackTrace(new PrintWriter(sw, true));
str = sw.toString();
sw.flush();
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return str;
}
public static String getClassName(String className) {
if (isNotBlank(className) && className.contains(".")) {
String classNames[] = className.split("\\.", className.length());
if (classNames != null && classNames.length > 0) {
return classNames[classNames.length - 1];
}
}
return "";
}
public static boolean isNotBlank(String str) {
return !isBlank(str);
}
public static boolean isBlank(String str) {
if (str == null)
return true;
if (str.length() == 0 || str.equals("null"))
return true;
return false;
}
/**
* 通过StringBuffer来组装字符串
*
* @param strings
* @return
*/
public static StringBuffer appendSb(Object... strings) {
StringBuffer sb = new StringBuffer();
for (Object str : strings) {
sb.append(str);
}
return sb;
}
}