当前位置: 首页 > news >正文

做网站后期都用什么软件谷歌网站质量指南

做网站后期都用什么软件,谷歌网站质量指南,优酷wordpress建站教程,河南企业网站建设价格本文将简单介绍loglus框架的基本使用,并给出demo 文章目录 前言Loglus常见用法自定义日志级别使用字段钩子输出到多个位置使用钩子实现自定义日志处理demo 前言 Logrus 是一个用于 Go 语言的结构化日志框架,它提供了丰富的日志级别、钩子和格式化选项。…

本文将简单介绍loglus框架的基本使用,并给出demo

文章目录

  • 前言
  • Loglus常见用法
    • 自定义日志级别
    • 使用字段钩子
    • 输出到多个位置
    • 使用钩子实现自定义日志处理
    • demo

前言

Logrus 是一个用于 Go 语言的结构化日志框架,它提供了丰富的日志级别、钩子和格式化选项。
环境搭建:

go get github.com/sirupsen/logrus

代码中导入Loglus

import ("github.com/sirupsen/logrus"
)

Loglus常见用法

自定义日志级别

可以添加一个 TraceLevel 级别来更详细地跟踪程序的执行流程

package mainimport ("github.com/sirupsen/logrus"
)var TraceLevel = logrus.Level(6)func main() {logger := logrus.New()logger.SetLevel(TraceLevel)logger.Trace("This is a trace level log")
}

使用字段钩子

使用字段钩子来在日志中添加额外的字段信息。例如,你可以添加一个钩子来记录每条日志的时间戳:

package mainimport ("github.com/sirupsen/logrus"
)func main() {logger := logrus.New()logger.SetFormatter(&logrus.JSONFormatter{})logger.AddHook(&logrus.FieldHook{Field: "timestamp",Func: func() (interface{}, error) {return time.Now().Format("2006-01-02T15:04:05.999Z07:00"), nil},})logger.Info("This is a log entry with timestamp field")
}

输出到多个位置

可以将日志同时输出到多个位置,比如标准输出和文件。以下是一个示例,将日志同时输出到控制台和文件中:

package mainimport ("os""io""github.com/sirupsen/logrus"
)func main() {logger := logrus.New()// 设置日志级别和输出格式// 输出到控制台logger.SetOutput(os.Stdout)// 输出到文件file, err := os.OpenFile("logfile.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)if err == nil {mw := io.MultiWriter(os.Stdout, file)logger.SetOutput(mw)} else {logger.Info("Failed to log to file, using default stderr")}logger.Info("This log entry will be output to both console and file")
}

使用钩子实现自定义日志处理

使用钩子来实现自定义的日志处理逻辑。例如,你可以添加一个邮件钩子,在产生错误日志时发送邮件通知:

package mainimport ("github.com/sirupsen/logrus""net/smtp"
)func main() {logger := logrus.New()// 设置日志级别和输出格式// 添加邮件钩子logger.AddHook(&logrus.Hook{Levels: []logrus.Level{logrus.ErrorLevel, logrus.FatalLevel},Fire: func(entry *logrus.Entry) error {sendEmailNotification(entry.Message)return nil},})logger.Error("An error occurred, email notification will be sent")
}func sendEmailNotification(message string) {// 实现发送邮件的逻辑
}

demo

这里给出一个保存日志到项目log文件的示例:

package middlewareimport ("fmt""github.com/gin-gonic/gin"retalog "github.com/lestrrat-go/file-rotatelogs""github.com/rifflock/lfshook""github.com/sirupsen/logrus""log""math""os""path""time"
)// SetOutputFile 设置输出文件名称,如果没有就创建
func SetOutputFile() (*os.File, string, error) {now := time.Now()logFilePath := ""if dir, err := os.Getwd(); err == nil {logFilePath = dir + "/logs"}_, err := os.Stat(logFilePath)if os.IsNotExist(err) {if err := os.MkdirAll(logFilePath, 0777); err != nil {log.Println(err.Error())return nil, "", err}}logFileName := now.Format("2006-01-02") + ".log"filePath := path.Join(logFilePath, logFileName)if _, err := os.Stat(filePath); err != nil {if _, err := os.Create(filePath); err != nil {log.Println(err.Error())return nil, "", err}}src, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0755)if err != nil {fmt.Println("err: ", err)return nil, "", err}log.Println("create log path: ", filePath)return src, filePath, nil
}// Logger 日志,此操作可以复用
func Logger() gin.HandlerFunc {//建立软连接,需要管理员权限linkName := "latest_log.log"//设置日志文件的路径src, filePath, _ := SetOutputFile()//创建日志logger := logrus.New()//输出logger.Out = src//设置日志级别logger.SetLevel(logrus.DebugLevel)// 显示日志行数//logger.SetReportCaller(true)//添加时间分割logWriter, _ := retalog.New(filePath,retalog.WithMaxAge(14*24*time.Hour),    //日志保留时间:2周retalog.WithRotationTime(24*time.Hour), //24小时分割一次retalog.WithLinkName(linkName),         //建立软连接)writeMap := lfshook.WriterMap{logrus.InfoLevel:  logWriter,logrus.FatalLevel: logWriter,logrus.DebugLevel: logWriter,logrus.WarnLevel:  logWriter,logrus.ErrorLevel: logWriter,logrus.PanicLevel: logWriter,}//实例化Hook := lfshook.NewHook(writeMap, &logrus.TextFormatter{TimestampFormat: "2006-01-02 15:04:05",})logger.AddHook(Hook)return func(c *gin.Context) {startTime := time.Now()c.Next()stopTime := time.Since(startTime)spendTime := fmt.Sprintf("%d ms", int(math.Ceil(float64(stopTime.Nanoseconds()/1000000.0))))hostName, err := os.Hostname()if err != nil {hostName = "unknown"}statusCode := c.Writer.Status()clientIp := c.ClientIP()//userAgent := c.Request.UserAgent()dataSize := c.Writer.Size()if dataSize < 0 {dataSize = 0}method := c.Request.MethodrequestPath := c.Request.RequestURIentry := logger.WithFields(logrus.Fields{"HostName":  hostName,"status":    statusCode,"SpendTime": spendTime,"Ip":        clientIp,"Method":    method,"Path":      requestPath,"DataSize":  dataSize,//"Agent":     userAgent, // TODO: UA})if len(c.Errors) > 0 {entry.Error(c.Errors.ByType(gin.ErrorTypePrivate).String())}if statusCode >= 500 {entry.Error()} else if statusCode >= 400 {entry.Warn()} else {entry.Info()}}
}

在gin中调用Logger()

	r := gin.New()r.Use(gin.Recovery())r.Use(middleware.Logger())
http://www.yayakq.cn/news/838195/

相关文章:

  • 做网站高流量赚广告费图书馆 网站建设
  • seo怎么做网站优秀案例月夜直播免费完整版
  • 石狮住房和城乡建设网站wordpress怎么生成app
  • 做soho外贸网站上海长城建设有限公司网站
  • 广州市网站建设 骏域装饰公司起名大全免费
  • 手机怎样制作个人网站苏州科技网站建设
  • 深圳网站设计公司哪种wordpress 手机菜单栏插件
  • asp网站开发 pdf江苏省和住房城乡建设厅网站首页
  • 部队网站源码网页设计实训心得体会500字
  • 外贸免费建设网站制作王建设医生个人网站
  • 网站建设就找奇思网络赣州港招聘信息
  • 湘潭网站网站建设360网站推广登录
  • vs2012 建网站嘉兴建设网站的
  • 腾讯云做淘客网站网站关键词调整 收录
  • 安徽六安的最新通告广东seo推广工具
  • 阿里云企业建站教程简述网站开发步骤
  • 门户网站建设需注意的问题校园网站建设管理制度
  • 番禺外贸网站建设青岛网站维护
  • 一个网站建设的目标自己可以做一个网站吗
  • 做微信广告网站有哪些千锋教育官方网
  • 上海网站建设公司四叶互联正规网站建设空间
  • 怎样建设电影网站四库一平台建筑企业资质查询
  • 企业网站建设策划书灌南网站定制
  • 怎么做网站服务器吗wordpress 比特币 插件
  • jsp网站开发实例教程本地网站建设官网
  • 源码交易平台网站源码渭南市建网站
  • 网站管理员怎么做联系方式壶关网站建设
  • 南阳网站建设的公司外贸网站外链怎么做
  • 建设网站虚拟主机在哪买如何制作企业的网站
  • 网站如何看是哪家公司做的餐饮营销型网站案例