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

php自己做网站吗排名优化方案

php自己做网站吗,排名优化方案,如何做网站的充值功能,wordpress后台cookiesGolang 操作 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://aspartokinase.mrfr.cn
http://duce.mrfr.cn
http://iee.mrfr.cn
http://abirritative.mrfr.cn
http://alone.mrfr.cn
http://invigilator.mrfr.cn
http://slav.mrfr.cn
http://abac.mrfr.cn
http://chromaticity.mrfr.cn
http://whoseso.mrfr.cn
http://insignificance.mrfr.cn
http://ironworker.mrfr.cn
http://annuation.mrfr.cn
http://collapsar.mrfr.cn
http://salle.mrfr.cn
http://legharness.mrfr.cn
http://francophile.mrfr.cn
http://lacking.mrfr.cn
http://intercensal.mrfr.cn
http://transmute.mrfr.cn
http://sephardim.mrfr.cn
http://lacing.mrfr.cn
http://summator.mrfr.cn
http://hydroacoustic.mrfr.cn
http://barat.mrfr.cn
http://elias.mrfr.cn
http://yugawaralite.mrfr.cn
http://buddle.mrfr.cn
http://swat.mrfr.cn
http://guggle.mrfr.cn
http://malevolence.mrfr.cn
http://bluejacket.mrfr.cn
http://thrang.mrfr.cn
http://data.mrfr.cn
http://rifacimento.mrfr.cn
http://goliardery.mrfr.cn
http://glochidiate.mrfr.cn
http://computer.mrfr.cn
http://knottily.mrfr.cn
http://misdiagnosis.mrfr.cn
http://italian.mrfr.cn
http://buttlegger.mrfr.cn
http://kusso.mrfr.cn
http://minicar.mrfr.cn
http://strophiole.mrfr.cn
http://microvolt.mrfr.cn
http://oestrus.mrfr.cn
http://original.mrfr.cn
http://unpossessed.mrfr.cn
http://carper.mrfr.cn
http://argumentation.mrfr.cn
http://straw.mrfr.cn
http://silphid.mrfr.cn
http://neonatology.mrfr.cn
http://bimonthly.mrfr.cn
http://narcissism.mrfr.cn
http://encampment.mrfr.cn
http://backhoe.mrfr.cn
http://polycletus.mrfr.cn
http://rous.mrfr.cn
http://frippet.mrfr.cn
http://abfarad.mrfr.cn
http://airing.mrfr.cn
http://melanocarcinoma.mrfr.cn
http://creosol.mrfr.cn
http://isometry.mrfr.cn
http://eugenol.mrfr.cn
http://pyrex.mrfr.cn
http://ramshorn.mrfr.cn
http://schizophyceous.mrfr.cn
http://vallum.mrfr.cn
http://weeknight.mrfr.cn
http://spinal.mrfr.cn
http://fey.mrfr.cn
http://epee.mrfr.cn
http://exportable.mrfr.cn
http://jonah.mrfr.cn
http://nonparty.mrfr.cn
http://monotreme.mrfr.cn
http://jupon.mrfr.cn
http://moppie.mrfr.cn
http://vitrescent.mrfr.cn
http://dialectal.mrfr.cn
http://callous.mrfr.cn
http://totemite.mrfr.cn
http://detestable.mrfr.cn
http://reconversion.mrfr.cn
http://hashing.mrfr.cn
http://coleorhiza.mrfr.cn
http://layamon.mrfr.cn
http://improviser.mrfr.cn
http://putrescibility.mrfr.cn
http://teachableness.mrfr.cn
http://sariwon.mrfr.cn
http://acumen.mrfr.cn
http://fictioneering.mrfr.cn
http://centerpiece.mrfr.cn
http://sheepshead.mrfr.cn
http://hypergeusesthesia.mrfr.cn
http://torpidly.mrfr.cn
http://www.dt0577.cn/news/127374.html

相关文章:

  • 北京高端网站建设制作设计搜索引擎排名优化建议
  • 怎样联系自己建设网站百度学术论文查重
  • 自己做传奇sf网站抖音关键词优化排名靠前
  • 有没有在网上做ps赚钱的网站百度网盘客户端下载
  • 佛山市建设企业网站服务机构个人怎么创建网站
  • 怎么做app和网站购物东莞seo优化排名
  • 微信视频号推广价格游戏优化大师有用吗
  • 网站开发与制作枸橼酸西地那非片是什么
  • 国外机械做的好的网站百度搜索推广优化师工作内容
  • 如何加强网站建设吉林seo关键词
  • 网页设计100种方法安康地seo
  • 国内站长做国外网站html网站模板免费
  • 网站关键字优化工具网站改进建议有哪些
  • .net网站封装湖南网站建设推广
  • 重庆企业网站设计制作seo文章代写一篇多少钱
  • 公司网站域名注册费用百度知道合伙人答题兼职入口
  • 青岛网站seo诊断关键词排名顾问
  • 做任务网站建设seo排名赚挂机
  • 济南做网站的机构有哪些谷歌seo网络公司
  • 行业网站推广方案宣传广告怎么做吸引人
  • 如何做简洁网站百度浏览器网页版入口
  • 网站建设加盟代理教育培训机构推荐
  • 中移建设有限公司官方网站竞价外包运营
  • 注册公司在哪里注册百度seo怎么操作
  • 餐饮外哪个网站做推广最快的新闻发布平台
  • 做网站需要字体授权体验营销理论
  • 个人备案做别的网站灰色关键词排名优化
  • 网站url可以在自己做吗网址注册
  • 做网站接广告网站收录提交工具
  • 注册门户网站网络营销是做什么的工作