All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.doudou.common.aop.LogData Maven / Gradle / Ivy

There is a newer version: 1.3.2
Show newest version
package top.doudou.common.aop;

import lombok.Data;
import top.doudou.common.tool.utils.BrowserUtils;

import java.util.Date;
import java.util.Map;

/**
 * @Description 自定义日志数据对象 (不提供对外的构造方法,每个线程中仅有一个此对象)
 * @Author 傻男人 <[email protected]>
 * @Date 2020-09-24 14:53
 * @Version V1.0
 */
@Data
public class LogData {

    private LogData() {
    }

    /**
     * 请务必注意该对象 使用->释放 原则
     */
    private static final ThreadLocal LOG_DATA = new ThreadLocal<>();

    /**
     * 主机
     */
    private String host;
    /**
     * 端口号
     */
    private Integer port;

    /**
     * 请求的随机id
     */
    private String reqCode;

    /**
     * 请求Ip
     */
    private String clientIp;
    /**
     * 请求地址
     */
    private String reqUrl;
    /**
     * http请求method
     */
    private String httpMethod;
    /**
     * 请求头部信息(可选择记录)
     */
    private Map headers;

    /**
     * 接口名字
     */
    private String interfaceName;
    /**
     * 操作类型(可以根据当前类型去插入到不同的库,比如用户/权限等大类,或者定义其他的东西)
     */
    private String type;
    /**
     * 异常存放的位置与step的记录
     */
    private String content;
    /**
     * 操作方法
     */
    private String method;
    /**
     * 请求的参数
     */
    private String args;
    /**
     * 响应体
     */
    private Object respond;
    /**
     * 操作日期(调用日期)
     */
    private Date logDate;
    /**
     * 业务处理耗时
     */
    private long costTime;
    /**
     * 线程名
     */
    private String threadName = Thread.currentThread().getName();
    /**
     * 线程Id
     */
    private long threadId = Thread.currentThread().getId();
    /**
     * 执行状态 成功(true)/异常(false)  默认失败false
     */
    private boolean success = false;

    /**
     * 请求的来源(手机电脑/浏览器)
     */
    private String reqSource;

    /**
     * 请求头中userAgent的信息
     */
    private String userAgent;

    public String getReqSource(){
        return BrowserUtils.getReqType(userAgent);
    }
    /**
     * 耗时计算
     */
    public void toCostTime() {
        LogData data = LogData.getCurrent();
        data.setCostTime((System.currentTimeMillis() - logDate.getTime()));
        LogData.setCurrent(data);
    }

    /**
     * 获取当前线程中的操作日志对象
     */
    public static LogData getCurrent() {
        LogData data = LOG_DATA.get();
        if (data == null) {
            data = new LogData();
            data.setLogDate(new Date());
            LOG_DATA.set(data);
        }
        return LOG_DATA.get();
    }

    public static void setCurrent(LogData data) {
        LOG_DATA.set(data);
    }

    /**
     * 移除当前线程操作日志对象
     */
    public static void removeCurrent() {
        LOG_DATA.remove();
    }

    /**
     * 内容记录记录 正常会在aop中结束释放
     *
     * @param step 这里可以使用 该方法记录每一个步骤 : 注意 调用该方法时 请注意释放 ; 不用此对象时,请 调用 移除当前线程操作日志对象
     */
    public static void step(String step) {
        LogData data = getCurrent();
        if (data.getContent() == null) data.setContent("");
        data.setContent(data.getContent() + step + "\n");
        setCurrent(data);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy