package cn.attackme.myuploader.utils;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;

import java.util.Date;

/**
 * 日志工具类
 */
@Slf4j
public class LogUtils {

    /**
     * 日志输出到文件
     * @param ex
     */
    public static void logToFile(Exception ex) {
        StackTraceElement stackTraceElement = ex.getStackTrace()[0];
        //出错行
        int lineNumber = stackTraceElement.getLineNumber();
        //类名
        String className = stackTraceElement.getClassName();
        //方法名
        String methodName = stackTraceElement.getMethodName();
        log.error("方法:" + className + "." + methodName + " | " +
                "参数:" + stackTraceElement + " | " + "错误行:" + lineNumber + " | " +
                "时间:" + " | " + new Date() + " | " + "异常内容:" + ex.toString()
        );
    }

    /**
     * 日志输出到文件, 提供给日志切面
     * @param joinPoint
     * @param ex
     */
    public static void logToFile(JoinPoint joinPoint, Throwable ex) {
        //出错行
        int lineNumber = ex.getStackTrace()[0].getLineNumber();
        //方法签名
        Signature signature = joinPoint.getSignature();
        //参数
        Object[] args = joinPoint.getArgs();
        StringBuilder builder = new StringBuilder();
        if (args.length > 0) {
            for (Object o : args) {
                builder.append(o);
            }
        }
        log.error("方法:" + signature + " | " + "参数:" + builder.toString() +
                " | " + "错误行:" + lineNumber + " | " + "时间:" + new Date() +
                " | " + "异常内容:" + ex.toString()
        );
    }
}