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

物流网站建设与管理wordpress删除边栏

物流网站建设与管理,wordpress删除边栏,php网站代做,软件开发文档实例理解底层— —Golang的log库#xff0c;实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现#xff1a;对日志实现设置日志级别#xff0c;每天生成一个文件#xff0c;同时添加上前缀以及展示文件名等 日志级别#xff0c;通过添加prefix#xff1a;[INFO]、…理解底层— —Golang的log库实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现对日志实现设置日志级别每天生成一个文件同时添加上前缀以及展示文件名等 日志级别通过添加prefix[INFO]、[DEBUG]等来实现每天生成一个日志文件写日志之前判断当前时间是否为新的一天日志文件命名获取每天的时间来实现命名同时添加读写锁保证并发安全获取调用日志文件代码行数及文件名runtime.Caller获取函数调用栈 2 实战 2.1 server.go package mainimport myTest/inter/log_pro/loggerfunc 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 (logosruntimestrconvstringssynctime )//基于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.dnsts.com.cn/news/41904.html

相关文章:

  • 泉州做网站seo宣传推广策略有哪些
  • 正规的企业网站建设公司备案怎么关闭网站吗
  • 企业年底做网站的好处网站百度关键词优化
  • 用记事本做网站专业智能建站网站
  • 辽宁省城乡和住房建设厅网站搜狗网址大全
  • 银川专业做网站的公司wordpress企业 破解主题下载地址
  • 做网站的结论和心得软件外包平台 接单
  • 沧州网站建设建站系统学前端好还是后端好
  • 微信公众号建立网站2024年营业执照年审入口
  • 建筑论坛网站东莞市网络策划推广哪家好
  • 网站开发和软件开发含义网络营销推广专员的岗位职责
  • 做优惠卷网站倒闭了多少中建装饰集团
  • 网站聚合页面营销网站建设 公司排名
  • 新八建设集团网站杭州前十强装修公司有哪几家
  • 有口碑的郑州网站建设安卓app用什么开发
  • 网站可以自己维护吗望野王维原文
  • 如何抄袭网站电子商务网站建设 试卷
  • 自己怎么优化我网站关键词微信crm系统如何添加
  • 虚拟主机怎么搭建网站销售管理系统实验报告
  • 重庆森林讲的什么内容企业网站建设网站优化推广
  • 潍坊市网站wordpress返利主题
  • 网站建设 数据归属wordpress idstore
  • 深泽网站制作做英文网站賺钱
  • 长春网站建设方案优化网站设计专业公司价格
  • 广州 环保 凡人网站建设上海网站建设公司兴田德润放心
  • phpcms网站音乐代码存放在什么位置常用的网站建设技术有什么软件
  • 那个网站做百科好过钉钉怎么注册企业
  • 创建手机网站模版盘龙网站建设
  • 校园网站设计方案黄页88网站推广方案
  • 阿瓦提网站建设中国突然宣布大消息