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

中国外贸人才网搜索引擎优化的主要内容

中国外贸人才网,搜索引擎优化的主要内容,设计h5是什么意思,长春vi设计公司理解底层— —Golang的log库,实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现:对日志实现设置日志级别,每天生成一个文件,同时添加上前缀以及展示文件名等 日志级别,通过添加prefix:[INFO]、…

理解底层— —Golang的log库,实现自定义Logger

1 分析实现思路

基于golang中自带的log库实现:对日志实现设置日志级别,每天生成一个文件,同时添加上前缀以及展示文件名等

  • 日志级别,通过添加prefix:[INFO]、[DEBUG]等来实现
  • 每天生成一个日志文件:写日志之前判断当前时间是否为新的一天
  • 日志文件命名:获取每天的时间来实现命名,同时添加读写锁保证并发安全
  • 获取调用日志文件代码行数及文件名:runtime.Caller获取函数调用栈

2 实战

2.1 server.go

package mainimport "myTest/inter/log_pro/logger"func main() {logger.SetFile("/Users/xsky/GolandProjects/MyTest/inter/log_pro/log/demo.log")logger.SetLevel(0)logger.Debug("hello %s", "ziyi")logger.Info("hello %s", "ziyi")
}

2.2 logger.go

package loggerimport ("log""os""runtime""strconv""strings""sync""time"
)//基于log库自定义实现logger
var (infoLogger  *log.LoggerdebugLogger *log.LoggerlogOut     *os.FilelogLevel   intcurrentDay int //每天生成一个日志文件logFile    stringfileLock   sync.RWMutex //读写锁,保证同一时间只有一个协程重命名文件
)const (DebugLevel = iota //0InfoLevel         //1
)func SetLevel(level int) {logLevel = level
}func init() {fileLock = sync.RWMutex{}
}func SetFile(file string) {var err errorlogOut, err = os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0664)if err != nil {panic(err)} else {//初始化自定义的Logger(基于golang中的log库)//log.LstdFlags表示时间格式等//log.Llongfile表示文件名及调用代码的位置,log.Llongfile=》改为通过getCallTrace获取前缀currentDay = time.Now().YearDay()infoLogger = log.New(logOut, "[INFO] ", log.LstdFlags)debugLogger = log.New(logOut, "[DEBUG] ", log.LstdFlags)logFile = file}
}func checkIfDayChange() {fileLock.Lock()defer fileLock.Unlock()day := time.Now().YearDay()if day == currentDay {return} else {//关闭之前的文件,重命名,并生成新的文件logOut.Close()postFix := time.Now().Add(-24 * time.Hour).Format("20060102")err := os.Rename(logFile, logFile+"."+postFix)if err != nil {//TODO 重命名日志文件失败,根据自身情况做处理}logOut, err = os.OpenFile(logFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0664)if err != nil {//TODO 打开新的日志文件失败,根据自己业务需求做处理}infoLogger = log.New(logOut, "[INFO] ", log.LstdFlags)debugLogger = log.New(logOut, "[DEBUG] ", log.LstdFlags)currentDay = day}
}//golang中的any相当于interface{}空接口
func Debug(format string, v ...any) {if logLevel <= DebugLevel {checkIfDayChange()debugLogger.Printf(getPrefix()+format, v)}
}func Info(format string, v ...any) {if logLevel <= InfoLevel {checkIfDayChange()infoLogger.Printf(getPrefix()+format, v)}
}//获取函数调用栈关系:拿到调用Info或者Debug所在的文件名及代码行数(runtime包)
func getCallTrace() (string, int) {_, file, lineNo, ok := runtime.Caller(3)if ok {return file, lineNo} else {return "", 0}
}//获取调用Info、Debug代码所在行数,文件名只获取最后三级
func getPrefix() string {file, lineNo := getCallTrace()path := strings.Split(file, "/")if len(path) > 3 {file = strings.Join(path[len(path)-3:], "/")}return file + ":" + strconv.Itoa(lineNo) + " "
}

3 效果

运行server.go查看效果:

在这里插入图片描述

目录结构:
在这里插入图片描述

http://www.dt0577.cn/news/15667.html

相关文章:

  • 网站维护怎么学关键词优化seo优化
  • 网站底部关键词企业推广网络营销
  • 做 理财网站有哪些问题南京响应式网站建设
  • 深圳创建网站电商平台怎么加入
  • 网站做桌面应用 iOS百度竞价排名是什么意思
  • 做网站什么是解析什么是跳转网络优化器免费
  • 拥有自己的网站 如何做推广网络营销主要特点有哪些
  • 武汉网站开发关于普通话的手抄报
  • 图书馆网站建设情况总结上海关键词优化方法
  • 专门做橱柜衣柜效果图的网站国际免费b站
  • 做竞价网站外链代发
  • 买入网站建设费的分录北京网站定制公司
  • 视频网站建设成本网络精准推广
  • 兰州建设一个网站多少钱域名注册平台
  • 网站使用字体ui设计
  • 湖南十大软件公司介绍seo的流程是怎么样的
  • 那个网站有兼职做室内设计扬州百度seo
  • 茂名市制作网站的公司一份完整的品牌策划方案
  • 北京房产网站建设网络seo是什么
  • 昆明网站seo外包网络推广业务
  • 化妆品的网站布局设计图片大全深圳百度公司地址在哪里
  • 苏州高端网站建设seo网络优化是什么意思
  • 南昌百度推广公司河南自助建站seo公司
  • 网站卖了对方做违法搜索引擎营销的主要方式有
  • wordpress 文本小工具编辑器厦门seo顾问屈兴东
  • 有没有专门做联谊的网站螺蛳粉的软文推广
  • 徐州做网站xlec网络推广网站推广淘宝运营商
  • 建一个个人网站一年多少钱中央人民政府
  • 十大网站建设品牌全国新增确诊病例
  • 网站建设公司墨子网络搜索优化的培训免费咨询