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

深圳企业网站建设推广服务邯郸今天最新通告

深圳企业网站建设推广服务,邯郸今天最新通告,商会网站怎么做,北京工程建设交易信息网站本文将简单介绍loglus框架的基本使用#xff0c;并给出demo 文章目录 前言Loglus常见用法自定义日志级别使用字段钩子输出到多个位置使用钩子实现自定义日志处理demo 前言 Logrus 是一个用于 Go 语言的结构化日志框架#xff0c;它提供了丰富的日志级别、钩子和格式化选项。… 本文将简单介绍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 (osiogithub.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/logrusnet/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 (fmtgithub.com/gin-gonic/ginretalog github.com/lestrrat-go/file-rotatelogsgithub.com/rifflock/lfshookgithub.com/sirupsen/logruslogmathospathtime )// 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) .logfilePath : 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.dnsts.com.cn/news/256458.html

相关文章:

  • asp网站安装教程展馆设计公司排名
  • 机械加工网站色彩搭配广州通报: 广州通报
  • 网站建设销售一个月营业额做一个手机购物网站多少钱
  • 西安网站建设推广专家厦门哪家做网站好
  • 品牌网站建设流程建设一个小说网站的步骤
  • 网站建设 通知做vi的图有网站吗
  • php网站开发过程网站建设header
  • 建设部网站安全考核证书查询登封建设局网站
  • 嘉兴做网站优化的公司系统数据库与建设网站
  • 在线作图免费网站谷歌海外广告投放推广
  • 响应式网站建设智能优化工信部网站备案电话
  • 遵义市住房和城乡建设局官方网站传奇网站装备动态图怎么做
  • 流量与网站如何做网站海报
  • 中国空间站实时位置管理外贸网站模板
  • 经典网站模板像淘宝购物网站建设需要哪些专业人员?
  • 做网站 用什么兼容网站拖拽
  • 建设什么样的网站月入一万建设工程施工合同实例
  • 如何搭建app开发平台seo推广培训课程
  • 做ppt的背景图片网站网站安全检测产品优势
  • wordpress 加密 插件北京搜索引擎优化seo
  • 在网站上做的图表怎么放到PPT里面做网站爱
  • 做网站有地区差异吗查询网入口
  • 北京企业模板建站有哪些北京网站设计网站公司
  • 区域网站查询优跃达官网网站建设项目
  • 网站开发自学网站wordpress原生评论
  • 如何做学校的网站设计高平网站建设
  • 黑龙江省建设协会网站首页做外贸的如何上国外网站
  • 全国企业信息查询网站网站同时使用asp php
  • 公司网站页脚网页浏览器
  • 武义县网站建设建筑工程素材资源网站