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

做企业网站要不要我们自己提供网站相关的图片?百度的关键词优化

做企业网站要不要我们自己提供网站相关的图片?,百度的关键词优化,日照定制网站建设服务,凡客优品Golang 操作 Logger、Zap Logger 日志_golang zap-CSDN博客 目录 一、 从控制器中获取参数的几种形式 1) 页面请求url直接拼接参数。 2) 页面请求提交form表单 3) 页面请求发送json数据,使用上下文对象c的BindJSON()方法接…

 Golang 操作 Logger、Zap Logger 日志_golang zap-CSDN博客

目录

     一、  从控制器中获取参数的几种形式

    1)  页面请求url直接拼接参数。

   2)    页面请求提交form表单

    3)   页面请求发送json数据,使用上下文对象c的BindJSON()方法接收数据

    4)    页面请求发送json数据,使用相应小写字段 结构体对象接收值。

 二、使用自定义的logger记录日志文件

       1)创建 自定义的logger.go文件   

         2)使用自定义logger

       1) 在common.go中文件写入logger.SimpleHttpGet()  :

        2)直接在路由请求调用的函数中写入logger.SimpleHttpGet()

三) 再次自定义logger

       

        使用自定义logger函数



     一、  从控制器中获取参数的几种形式

    1)  页面请求url直接拼接参数。

   2)    页面请求提交form表单

    3)   页面请求发送json数据,使用上下文对象c的BindJSON()方法接收数据

    4)    页面请求发送json数据,使用相应小写字段 结构体对象接收值。

 二、使用自定义的logger记录日志文件

       1)创建 自定义的logger.go文件   

package loggerimport ("net/http""github.com/natefinch/lumberjack""go.uber.org/zap""go.uber.org/zap/zapcore"
)var sugarLogger *zap.SugaredLogger//func main() {
//	InitLogger()
//	defer sugarLogger.Sync()
//	simpleHttpGet("https://www.baidu.com")
//	simpleHttpGet("https://c.runoob.com")
//}func InitLogger() {writeSyncer := getLogWriter()encoder := getEncoder()core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)logger := zap.New(core)sugarLogger = logger.Sugar()
}// func getEncoder() zapcore.Encoder {
// return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
// return zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig())
// }func getEncoder() zapcore.Encoder {encoderConfig := zap.NewProductionEncoderConfig()encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoderencoderConfig.EncodeLevel = zapcore.CapitalLevelEncoderreturn zapcore.NewConsoleEncoder(encoderConfig)
}// func getLogWriter() zapcore.WriteSyncer {
//如果想要追加写入可以查看我的博客文件操作那一章
// file, _ := os.Create("./test.log")
// return zapcore.AddSync(file)
// }func getLogWriter() zapcore.WriteSyncer {lumberJackLogger := &lumberjack.Logger{Filename:   "./test.log",MaxSize:    1,MaxBackups: 5,MaxAge:     30,Compress:   false,}return zapcore.AddSync(lumberJackLogger)
}func SimpleHttpGet(url string) {sugarLogger.Debugf("Trying to hit GET request for %s", url)resp, err := http.Get(url)if err != nil {sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)} else {sugarLogger.Infof("Success! statusCode = %s for URL %s", resp.Status, url)resp.Body.Close()}
}

         2)使用自定义logger

       1) 在common.go中文件写入logger.SimpleHttpGet()  :

                每个url请求调用的函数最终调同到ReturnSuccess()函数

    logger.InitLogger()logger.SimpleHttpGet(c.Request.URL.Path)

        2)直接在路由请求调用的函数中写入logger.SimpleHttpGet()

 

三) 再次自定义logger

package loggerimport ("fmt""github.com/gin-gonic/gin""github.com/sirupsen/logrus""io""net/http""os""path""runtime/debug""time"
)func init() {// 设置日志格式为json格式logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05",})logrus.SetReportCaller(false)
}func Write(msg string, filename string) {setOutPutFile(logrus.InfoLevel, filename)logrus.Info(msg)
}func Debug(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.DebugLevel, "debug")logrus.WithFields(fields).Debug(args)
}func Info(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.InfoLevel, "info")logrus.WithFields(fields).Info(args)
}func Warn(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.WarnLevel, "warn")logrus.WithFields(fields).Warn(args)
}func Fatal(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.FatalLevel, "fatal")logrus.WithFields(fields).Fatal(args)
}func Error(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.ErrorLevel, "error")logrus.WithFields(fields).Error(args)
}func Panic(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.PanicLevel, "panic")logrus.WithFields(fields).Panic(args)
}func Trace(fields logrus.Fields, args ...interface{}) {setOutPutFile(logrus.TraceLevel, "trace")logrus.WithFields(fields).Trace(args)
}func setOutPutFile(level logrus.Level, logName string) {if _, err := os.Stat("./runtime/log"); os.IsNotExist(err) {err = os.MkdirAll("./runtime/log", 0777)if err != nil {panic(fmt.Errorf("create log dir '%s' error: %s", "./runtime/log", err))}}timeStr := time.Now().Format("2006-01-02")fileName := path.Join("./runtime/log", logName+"_"+timeStr+".log")var err erroros.Stderr, err = os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)if err != nil {fmt.Println("open log file err", err)}logrus.SetOutput(os.Stderr)logrus.SetLevel(level)return
}func LoggerToFile() gin.LoggerConfig {if _, err := os.Stat("./runtime/log"); os.IsNotExist(err) {err = os.MkdirAll("./runtime/log", 0777)if err != nil {panic(fmt.Errorf("create log dir '%s' error: %s", "./runtime/log", err))}}timeStr := time.Now().Format("2006-01-02")fileName := path.Join("./runtime/log", "success_"+timeStr+".log")os.Stderr, _ = os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)var conf = gin.LoggerConfig{Formatter: func(param gin.LogFormatterParams) string {return fmt.Sprintf("%s - %s \"%s %s %s %d %s \"%s\" %s\"\n",param.TimeStamp.Format("2006-01-02 15:04:05"),param.ClientIP,param.Method,param.Path,param.Request.Proto,param.StatusCode,param.Latency,param.Request.UserAgent(),param.ErrorMessage,)},Output: io.MultiWriter(os.Stdout, os.Stderr),}return conf
}func Recover(c *gin.Context) {defer func() {if err := recover(); err != nil {if _, errDir := os.Stat("./runtime/log"); os.IsNotExist(errDir) {errDir = os.MkdirAll("./runtime/log", 0777)if errDir != nil {panic(fmt.Errorf("create log dir '%s' error: %s", "./runtime/log", errDir))}}timeStr := time.Now().Format("2006-01-02")fileName := path.Join("./runtime/log", "error_"+timeStr+".log")f, errFile := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)if errFile != nil {fmt.Println(errFile)}timeFileStr := time.Now().Format("2006-01-02 15:04:05")f.WriteString("panic error time:" + timeFileStr + "\n")f.WriteString(fmt.Sprintf("%v", err) + "\n")f.WriteString("stacktrace from panic:" + string(debug.Stack()) + "\n")f.Close()c.JSON(http.StatusOK, gin.H{"code": 500,"msg":  fmt.Sprintf("%v", err),})//终止后续接口调用,不加的话recover到异常后,还会继续执行接口里后续代码c.Abort()}}()c.Next()
}

       

        使用自定义logger函数

http://www.tj-hxxt.cn/news/6890.html

相关文章:

  • o2o网站建设新闻关键词排名监控
  • 做类似淘宝的网站搜索推广
  • 淘宝客网站建设教程竞价账户
  • asp.net动态的网站开发如何做seo优化
  • 深圳婚纱摄影网站建设免费网站模板库
  • 武汉高端婚纱摄影宁波seo企业推广
  • 兰州做高端网站的公司如何做好营销
  • 有没有做ppt很厉害的网站seo排名优化方式
  • 网站开发app小程序国内最好的搜索引擎
  • 给医院做网站赚钱吗seo教程免费分享
  • 网站建设软件开发it菜鸡网seo
  • 美国社交网络公司排名google移动服务应用优化
  • ps做网站的优点网络营销培训课程
  • 连云港网站建设公司预测2025年网络营销的发展
  • wordpress amazon重庆seo技术分享
  • 网站制作成app互联网营销课程体系
  • 广州市网站设计公司网站推广优化外链
  • 电影网站开发教程成都网站seo外包
  • 电子商务网站怎么做推广一个产品的市场营销策划方案
  • 网页设计结课论文青海seo关键词排名优化工具
  • 做旅游攻略的网站代码世界杯比分查询
  • 电气建设网站三十个知识点带你学党章
  • 做外贸网站怎么做广告公司推广渠道
  • 宜昌 网站建设2345网址导航官网官方电脑版
  • 织梦网站后台怎么登陆海外自媒体推广
  • 浙江省住房城乡建设厅官方网站如何进行网站的宣传和推广
  • 网站备案号查询网淘宝seo 优化软件
  • 广东品牌网站建设怎么在百度推广自己的公司
  • 站长之家网址查询湖南seo推广多少钱
  • 给你一个网站你如何做优化南宁seo怎么做优化团队