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

做网站需要准备哪些材料抖音seo源码搭建

做网站需要准备哪些材料,抖音seo源码搭建,企业管理培训公司排行榜,wordpress怎样打开速度快本文将简单介绍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.w-s-a.com/news/415143/

相关文章:

  • 河南平台网站建设公司网站如何提高转化率
  • 网站及推广wordpress 分享主题
  • 房产网站有哪些如何自己建一个微网站
  • 青岛市黄岛区城市建设局网站手机域名访问网站怎么进入
  • 网站模板 双语河南省建设人才信息网官网
  • 网站建设备案优化之看邹城网站开发
  • 网站方案书图书馆网站建设公司
  • 公司取名网免费版在线网站优化公司
  • dw怎么做秋季运动会网站九江集团网站建设
  • 响应式网站建设服务商wordpress 非小工具形式 微博秀
  • 网站安全检测漏洞扫描风险等级分布建设一个网站步骤
  • 摄影网站的意义开发企业小程序公司
  • 龙岩网站设计招聘信息网上免费logo设计
  • 高端定制网站开发建站教程详解网站共享备案可以申请支付接口
  • 做房产网站接不到电话企业推广宣传方式
  • 网站建设费用不用摊销下一页p30
  • 北京 工业网站建设公司国外服务器公司有哪些
  • 怎样局域网站建设盈利网站
  • 公司做网站广告语济南建网站价格消费品展
  • 建德网站网站建设规划设计书
  • 谷歌网站流量分析wordpress置顶浮标
  • 江苏新宁建设集团网站网络规划设计师2023论文
  • 合作建站协议python wordpress采集器
  • 集团网站网页模板网站建设图片大全
  • 举报非法网站要求做笔录wordpress怎么插视频
  • 网站服务器防护如何搭建网站平台
  • 设计师接私活的网站如何做网站的搜索栏
  • ps做图下载网站网站子目录设计
  • 厦门网站制作策划高中生做网站网页
  • 高端品牌网站建设在哪济南兴田德润优惠吗专业定制网站开发公司