欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang logrus日志框架實例詳解

 更新時間:2023年08月02日 09:54:21   作者:RSFeegg  
logrus是一個可插拔的、結構化的日志框架,這篇文章主要介紹了golang logrus日志框架實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

logrus簡介

logrus是一個可插拔的、結構化的日志框架。
logrus擁有六種日志級別:debug、info、warn、error、fatal和panic
可擴展的Hook機制:
允許使用者通過hook的方式將日志分發(fā)到任意地方,如本地文件系統(tǒng)、標準輸出、logstash、elasticsearch或者mq等,或者通過hook定義日志內容和格式等。
logrus內置了兩種日志格式,JSONFormatter和TextFormatter,如果這兩個格式不滿足需求,可以自己動手實現接口Formatter,來定義自己的日志格式。
logrus鼓勵通過Field機制進行精細化的、結構化的日志記錄,而不是通過冗長的消息來記錄日志。

寫一個簡單的例子

package main
import (
  log "github.com/sirupsen/logrus"
)
func main() {
  log.WithFields(log.Fields{
    "animal": "walrus",
  }).Info("A walrus appears")
}

高級用法

logger是一種相對高級的用法, 對于一個大型項目, 往往需要一個全局的logrus實例,即logger對象來記錄項目所有的日志。

一些默認的初始化

package main
import (
  log "github.com/sirupsen/logrus"
)
func main() {
	var log = logrus.New()
	// 設置日志級別為xx以及以上
	 log.SetLevel(logrus.InfoLevel)
	 //JSON在生產中通常只在使用Splunk或Logstash等工具進行日志聚合時才有用。
	 // 設置日志格式為json格式
	// log.SetFormatter(&logrus.JSONFormatter{
	// 	// PrettyPrint: true,//格式化json
	// 	TimestampFormat: "2006-01-02 15:04:05",//時間格式化
	// })
	log.SetFormatter(&logrus.TextFormatter{
		TimestampFormat: "2006-01-02 15:04:05",//時間格式化
	})
	// 設置將日志輸出到標準輸出(默認的輸出為stderr,標準錯誤)
	// 日志消息輸出可以是任意的io.writer類型
	log.SetOutput(os.Stdout)
    // 初始化一些公共參數
	loginit:=log.WithFields(logrus.Fields{
		"animal": "walrus",
	})
	//輸出日志
	log.Info("A walrus appears")
}

在日志中打印文件行號等信息

log.SetReportCaller(true)可以打印行號

package main
import (
  "github.com/sirupsen/logrus"
  "os"
  "runtime"
	"time"
)
func main() {
// logger是一種相對高級的用法, 對于一個大型項目, 往往需要一個全局的logrus實例,即logger對象來記錄項目所有的日志。
	var log = logrus.New()
	log.SetReportCaller(true) // 顯示行號等信息
	 // 設置日志級別為xx以及以上
	 log.SetLevel(logrus.InfoLevel)
	log.SetFormatter(&logrus.TextFormatter{
		TimestampFormat: "2006-01-02 15:04:05",//時間格式化
	})
	// 設置將日志輸出到標準輸出(默認的輸出為stderr,標準錯誤)
	// 日志消息輸出可以是任意的io.writer類型
	log.SetOutput(os.Stdout)
	// 初始化一些公共參數
	loginit:=log.WithFields(logrus.Fields{
		"animal": "walrus",
	})
	log.Info("A walrus appears")
}

golang logrus日志框架

logrus自定義log 日志

廢話不多說,直接舉個栗子

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"net/http"
	"os"
)
var log=logrus.New()//創(chuàng)建一個log實例
func initLogrus()error{
	log.Formatter=&logrus.JSONFormatter{}//設置為json格式的日志
    file,err:=os.OpenFile("./gin_log.log",os.O_CREATE|os.O_WRONLY|os.O_APPEND,0644)//創(chuàng)建一個log日志文件
    if err!=nil{
		fmt.Println("創(chuàng)建文件/打開文件失敗!")
		return err
    }
    log.Out=file//設置log的默認文件輸出
    gin.SetMode(gin.ReleaseMode)//發(fā)布版本
    gin.DefaultWriter=log.Out//gin框架自己記錄的日志也會輸出
    log.Level=logrus.InfoLevel//設置文件級別
    return nil
}
func main() {
	err:=initLogrus()
	if err!=nil{
		fmt.Println(err)
		return
	}
	r := gin.Default()
	r.GET("/logrus", func(c *gin.Context) {
		//定義寫入log日志的信息
		log.WithFields(logrus.Fields{
			"url":c.Request.RequestURI,
			"method":c.Request.Method,
			"params":c.Query("name"),
			"IP":c.ClientIP(),
		}).Info()
		resData:= struct {
			Code int `json:"code"`
			Msg string `json:"msg"`
			Data interface{} `json:"data"`
		}{http.StatusOK,"響應成功","OK"}
		c.JSON(http.StatusOK,resData)
	})
	r.Run(":9090")
}
# 碼完直接go run 某go 文件。如果沒安裝import那些依賴。直接go mod tidy;

上效果

在這里插入圖片描述

在這里插入圖片描述

logrus設置最大保存時間、設置日志切割時間間隔等

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"github.com/rifflock/lfshook"
	"github.com/sirupsen/logrus"
	"net/http"
	"os"
	"path"
	"time"
)
var (
	logFilePath="./"http://文件存儲路徑
	logFileName="system.log"
)
func main() {
	r := gin.Default()
	//添加中間件,主要實現log日志的生成
	r.Use(logMiddleware())
	r.GET("/logrus2", func(c *gin.Context) {
		c.JSON(http.StatusOK,gin.H{
			"code":200,
			"msg":"響應成功",
			"data":"ok",
		})
	})
	r.Run(":9090")
}
func logMiddleware() gin.HandlerFunc{
	//日志文件
	fileName := path.Join(logFilePath, logFileName)
	file,err:=os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY|os.O_APPEND,0644)//創(chuàng)建一個log日志文件
	if err!=nil{
		fmt.Println(err)
	}
	//實例化
	logger:=logrus.New()
	//設置日志級別
	logger.SetLevel(logrus.DebugLevel)
	logger.Out=file//設置log的默認文件輸出
	logWriter,err:=rotatelogs.New(
		//分割后的文件名稱
		fileName+".%Y%m%d.log",
		//生成軟鏈接,指向最新日志文件
		rotatelogs.WithLinkName(fileName),
		//設置最大保存時間7天
		rotatelogs.WithMaxAge(7*24*time.Hour),
		//設置日志切割時間間隔(1天)
		rotatelogs.WithRotationTime(1*time.Hour),
	)
	//hook機制的設置
	writerMap:=lfshook.WriterMap{
		logrus.InfoLevel:  logWriter,
		logrus.FatalLevel: logWriter,
		logrus.DebugLevel: logWriter,
		logrus.WarnLevel:  logWriter,
		logrus.ErrorLevel: logWriter,
		logrus.PanicLevel: logWriter,
	}
	//給logrus添加hook
	logger.AddHook(lfshook.NewHook(writerMap,&logrus.JSONFormatter{
		TimestampFormat:  "2006-01-02 15:04:05",
	}))
	return func(c *gin.Context) {
		c.Next()
		//請求方法
		method:=c.Request.Method
		//請求路由
		reqUrl:=c.Request.RequestURI
		//狀態(tài)碼
		statusCode:=c.Writer.Status()
		//請求ip
		clientIp:=c.ClientIP()
		logger.WithFields(logrus.Fields{
			"status_code":statusCode,
			"client_ip":clientIp,
			"req_method":method,
			"req_url":reqUrl,
		}).Info()
	}
}

到此這篇關于golang logrus日志框架的文章就介紹到這了,更多相關golang logrus日志框架內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang實現數組分割的示例代碼

    golang實現數組分割的示例代碼

    本文主要介紹了golang實現數組分割的示例代碼,要求把數組分割成多個正整數大小的數組,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • go語言版的ip2long函數實例

    go語言版的ip2long函數實例

    這篇文章主要介紹了go語言版的ip2long函數,實例分析了Go語言實現的ip2long函數技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go 讀取BMP文件頭二進制讀取方式

    go 讀取BMP文件頭二進制讀取方式

    這篇文章主要介紹了go 讀取BMP文件頭二進制讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang內存泄漏詳解之原因、檢測與修復過程

    Golang內存泄漏詳解之原因、檢測與修復過程

    本文詳細介紹了Golang中的內存泄漏問題,包括內存泄漏的定義、分類、影響以及預防和修復方法,通過使用Golang自帶的性能分析工具和火焰圖工具,可以有效地檢測和定位內存泄漏的代碼路徑,合理的代碼設計和定期的代碼審查也是預防內存泄漏的關鍵
    2024-12-12
  • golang使用http client發(fā)起get和post請求示例

    golang使用http client發(fā)起get和post請求示例

    這篇文章主要介紹了golang使用http client發(fā)起get和post請求示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Go語言帶緩沖的通道實現

    Go語言帶緩沖的通道實現

    這篇文章主要介紹了Go語言帶緩沖的通道實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 使用go備份StarRocks建表語句方法實例

    使用go備份StarRocks建表語句方法實例

    這篇文章主要為大家介紹了使用go備份StarRocks建表語句方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言map字典用法實例分析

    Go語言map字典用法實例分析

    這篇文章主要介紹了Go語言map字典用法,實例分析了map字典的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang?使用sort.slice包實現對象list排序

    golang?使用sort.slice包實現對象list排序

    這篇文章主要介紹了golang?使用sort.slice包實現對象list排序,對比sort跟slice兩種排序的使用方式區(qū)別展開內容,需要的小伙伴可以參考一下
    2022-03-03
  • golang實現單點登錄系統(tǒng)(go-sso)

    golang實現單點登錄系統(tǒng)(go-sso)

    這篇文章主要介紹了golang實現單點登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論