zoukankan      html  css  js  c++  java
  • golang基于gin框架封装的log日志类

    package util
    
    import (
        "crypto/md5"
        "encoding/hex"
        "fmt"
        "os"
        "runtime"
        "strconv"
        "time"
    )
    
    var strCGroupLogID string = ""
    
    func LogRecord(msg string, level string) (string, error) {
        ymd := time.Now().Format("2006-01-02")
        now := time.Now().Format("2006-01-02 15:04:05")
        fileName := GetAppPath() + "storage/" + level + "-" + ymd + ".log"
    
        logFile, logFileErr := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
        if logFileErr != nil {
            return "open log file fail", logFileErr
        }
    
        defer logFile.Close()
    
        _, file, line, _ := runtime.Caller(1)
        // log format = [时间] [用户组日志id] 日志信息
        if strCGroupLogID == "" {
            strCGroupLogID = GenCGroupLogID()
        }
        logFile.WriteString("[" + now + "][" + strCGroupLogID + "]" + msg + ", FILE:" + file + ", LINE:" + strconv.Itoa(line) + "
    ")
    
        return "log ok", nil
    }
    
    func GenCGroupLogID() string {
        strGuid := GetGUID().Hex()
        strLocalIP := GetLocalIP()
        if strLocalIP == "" {
            strLocalIP = "127.0.0.1"
        }
        int64LocalIP := InetAtoN(strLocalIP)
        _ = strLocalIP
        strCGroupLogID = strconv.FormatInt(int64LocalIP, 10) + "-" + strGuid
        strCGroupLogID = Md5(strCGroupLogID)
        strCGroupLogID = getFormatUUID(strCGroupLogID)
        return strCGroupLogID
    }
    
    func SetCGroupLogID(logid string) string {
        strCGroupLogID = logid
        return "ok"
    }
    
    func GetCGroupLogID() string {
        return strCGroupLogID
    }
    
    //生成32位md5字串
    func Md5(s string) string {
        h := md5.New()
        h.Write([]byte(s))
        return hex.EncodeToString(h.Sum(nil))
    }
    
    func getFormatUUID(s string) string {
        if len(s) != 32 {
            return s
        }
        return fmt.Sprintf("%s-%s-%s-%s-%s",
            s[0:8],
            s[8:12],
            s[12:16],
            s[16:20],
            s[20:32])
    }
    
    func LogStack(err error) {
        var buf [4096]byte
        n := runtime.Stack(buf[:], false)
        LogRecord(err.Error() + "
    " + string(buf[:n]) + "
    ", "panic")
    }
    package api_controller
    
    import (
        "fmt"
        "github.com/gin-gonic/gin"
        "net/http"
        "util"
    
    )
    
    
    func Getsmscode(c *gin.Context) {
        defer func() {
            if r := recover(); r != nil {
                util.LogStack(r.(error)) //日志调用
                c.JSON(200, gin.H{"status": 500, "data": r, "msg": "网络异常,请稍后再试"}); return
            }
        }()
    
        var (
            params             string
        )
    
        if params = c.DefaultPostForm("testkey", ""); params == "" {
            c.JSON(http.StatusOK, gin.H{"status": params, "data": "", "msg": "data不能为空"})
            return
        }
        fmt.Println(params)
     
    }
  • 相关阅读:
    curl命令具体解释
    奇妙的go语言(聊天室的开发)
    python fabric实现远程操作和部署
    未来将是越界的时代
    Impala与Hive的比較
    不用加减乘除做加法
    跟我学系列教程——《13天让你学会Redis》火热报名中
    JavaScript(19)jQuery HTML 获取和设置内容和属性
    springMVC3学习(六)--SimpleFormController
    hdu 4908 BestCoder Sequence
  • 原文地址:https://www.cnblogs.com/wt645631686/p/13566615.html
Copyright © 2011-2022 走看看