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

com.jladder.logger.LogForSql Maven / Gradle / Ivy

package com.jladder.logger;

import com.jladder.Ladder;
import com.jladder.actions.impl.EnvAction;
import com.jladder.configs.Configure;
import com.jladder.data.Record;
import com.jladder.db.DbParameter;
import com.jladder.db.Rs;
import com.jladder.db.SqlText;
import com.jladder.lang.Json;
import com.jladder.lang.Machine;
import com.jladder.lang.Regex;
import com.jladder.lang.Strings;
import com.jladder.web.WebContext;

import java.io.InputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class LogForSql {
    private String site;
    private String watchpoint;
    /**
     * 执行类型
     */
    public String type = "query";
    /**
     * sql文本
     */
    public String sqltext;
    /**
     * 连接器
     */
    public String conn;
    /**
     * 是否错误
     */
    public boolean isError;

    /**
     * 是否超期
     */
    public boolean isOverTime;

    /**
     * 开始时间
     */
    public Date starttime =  new Date();
    /**
     * 结束时间
     */
    public Date endtime;

    /**
     * 持续时长
     */
    public int duration;

    /**
     * 引发原因
     */
    public String cause;

    /**
     * 调用堆栈
     */
    public String stacktrace;
    /**
     * 填充数据
     */
    public String data;

    /// 
    /// 访问者
    /// 
//    public String visitor = EnvAction.GetEnvValue("username");
    public String visitor;
    /**
     * 请求标识
     */
    public String requestmark;
    /**
     * 标签,用于模型名称
     */
    public String tag;


    /**
     * 设置模型标签
     * @param tag 标签名称
     */
    public LogForSql SetTag(String tag){
        this.tag = tag;
        return this;
    }
    /**
     * 设置引发原因
     * @param message 错误信息
     */
    public LogForSql setCause(String message){
        this.cause = message;
        return this;
    }
    /**
     * 设置调用堆栈
     * @param trace 堆栈
     */
    public LogForSql setStackTrace(String trace){
        this.stacktrace = trace;
        return this;
    }

    /**
     * 设置调用堆栈
     * @param type 执行类型
     */
    public LogForSql setType(String type){
        if (Strings.isBlank(type)) return this;
        String[] ts = Regex.split(type.trim(), "\\s");
        this.type = ts[0];
        return this;
    }
    /**
     * 实例化
     * @param cmd sql命令
     */
    public LogForSql(String cmd){
        this.sqltext = cmd;
        this.requestmark = WebContext.getAttributeString("__requestmark__");
    }

    /**
     * 实例化
     * @param cmd sql命令
     * @param conn 连接器
     */
    public LogForSql(String cmd, String conn){
        this.sqltext = cmd;
        this.conn = conn;
        this.requestmark =WebContext.getAttributeString("__requestmark__");
    }
    /// 
    /// 实例化
    /// 
    /// sql文本
    /// 连接器
    /// 是否错误
    public LogForSql(String cmd, String conn, boolean isError){
        this.sqltext = cmd;
        this.conn = conn;
        this.isError = isError;
        this.requestmark = WebContext.getAttributeString("__requestmark__");
    }
    /// 
    /// 实例化
    /// 
    /// sql文本
    /// 是否错误
    public LogForSql(String cmd, boolean isError){
        this.sqltext = cmd;
        this.isError = isError;
        this.requestmark = WebContext.getMark();
    }
    /// 
    /// 实例化
    /// 
    public LogForSql(){}

    /**
     * 实例化
     * @param sqltext sql语句
     */
    public LogForSql(SqlText sqltext){
        if(sqltext==null)return;
        this.sqltext = sqltext.cmd;
        if (Rs.isBlank(sqltext.parameters)) return;
        Record dic = new Record();
        sqltext.parameters.forEach(x -> {
            if(x.value instanceof InputStream)return;
            if(x.value instanceof byte[])return;
            dic.put(x.name, x.value);
        });
        this.data = dic.toString();
        this.requestmark = WebContext.getMark();
        setType(sqltext.cmd);
        if("select".equals(type))this.sqltext=sqltext.toString();
    }
    public LogForSql setEnd(){
        return setEnd(false);
    }

    /***
     * 设置结束点
     * @param isError 是否含有错误
     */

    public LogForSql setEnd(boolean isError){
        this.isError = isError;
        if(isError){
            LogFoRequest request_log = WebContext.getLogger();
            if(request_log!=null)request_log.increaseException();
        }
        endtime = new Date();
        long time = (endtime.getTime() - starttime.getTime());
        if (time > Ladder.Settings().getSqlWarnTime()) this.isOverTime = true;
        duration = (int)time;
        requestmark=WebContext.getMark();
        if(Strings.isBlank(this.type))setType(this.sqltext);
        if(Strings.isBlank(visitor))visitor = EnvAction.getEnvValue("username");
        watchpoint = Configure.getString("_MachineInfo_IP_");
        if(Strings.isBlank(watchpoint)){
            watchpoint= Machine.getLocalIp();
            Configure.put("_MachineInfo_IP_",watchpoint);
        }
        site=Ladder.Settings().getSite();
        return this;
    }
    public LogForSql setData(List data) {
        if (Rs.isBlank(data)) return this;
        Record dic = new Record();
        data.forEach(x -> dic.put(x.name, x.value));
        this.data = dic.toString();
        return this;
    }
    public LogForSql setData(Map data){
        if (data == null || data.size()<1) return this;
        this.data = Json.toJson(data);
        return this;
    }
    public LogForSql setTag(String tag){
        this.tag =tag;
        return this;
    }

    public LogForSql setConn(String conn) {
        this.conn = conn;
        return this;
    }
    public void write(){
        Logs.write(this);
    }
    /***
     * 设置异常信息
     * @param e 异常
     */
    public void setException(Exception e) {
        e.printStackTrace();
        this.stacktrace="";
        List stacks = Arrays.stream(e.getStackTrace()).limit(25).collect(Collectors.toList());
        stacks.forEach(x->this.stacktrace+=x.getClassName()+"$"+x.getMethodName()+"("+x.getLineNumber()+")"+System.lineSeparator());
        setEnd(true).setCause(e.getMessage());
    }

    /**
     * 获取站点
     */
    public String getSite() {
        return site;
    }

    /**
     * 设置站点
     * @param site
     */
    public void setSite(String site) {
        this.site = site;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy