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

国内10大网站建设公司app外包公司推荐

国内10大网站建设公司,app外包公司推荐,福州网页建站维护有哪些,河间网站建设公司日志处理和正则处理 1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer捕获panic 2、正则处理2.1、正则表达式语法大全2.2、基本匹配2.3、常见函数使用2.4、从html提取汉字demo 1、logx日志处理 1.1、logx简介 logx 是 go-zero 框架中用于日志记…

日志处理和正则处理

  • 1、logx日志处理
    • 1.1、logx简介
    • 1.2、日志初始化与配置
    • 1.3、常用方法
    • 1.4、配合defer捕获panic
  • 2、正则处理
    • 2.1、正则表达式语法大全
    • 2.2、基本匹配
    • 2.3、常见函数使用
    • 2.4、从html提取汉字demo

1、logx日志处理

1.1、logx简介

logxgo-zero 框架中用于日志记录的核心包,具有以下特点:

  • 统一日志格式(带时间、级别、调用栈)
  • 自动日志切割
  • 支持多种日志输出模式(控制台、文件、volume)
  • 支持链路追踪(context 支持)
  • 支持日志等级控制(debug/info/error/alert)
  • 内建 panic 捕获机制,防止程序崩溃
type LogConf struct {ServiceName         string              `json:",optional"`Mode                string              `json:",default=console,options=[console,file,volume]"`Encoding            string              `json:",default=json,options=[json,plain]"`TimeFormat          string              `json:",optional"`Path                string              `json:",default=logs"`Level               string              `json:",default=info,options=[info,error,severe]"`Compress            bool                `json:",optional"`KeepDays            int                 `json:",optional"`StackCooldownMillis int                 `json:",default=100"`MaxBackups          int                 `json:",default=0"`MaxSize             int                 `json:",default=0"`Rotation            string              `json:",default=daily,options=[daily,size]"`
}
  • ServiceName:设置服务名称,可选。在 volume 模式下,该名称用于生成日志文件。在 rest/zrpc 服务中,名称将被自动设置为 restzrpc 的名称。
  • Mode:输出日志的模式,默认是 console
  • console 模式将日志写到 stdout/stderr
  • file 模式将日志写到 Path 指定目录的文件中
  • volume 模式在 docker 中使用,将日志写入挂载的卷中
  • Encoding: 指示如何对日志进行编码,默认是 json
  • json模式以 json 格式写日志
  • plain模式用纯文本写日志,并带有终端颜色显示
  • TimeFormat:自定义时间格式,可选。默认是 2006-01-02T15:04:05.000Z07:00
  • Path:设置日志路径,默认为 logs
  • Level: 用于过滤日志的日志级别。默认为 info
    • info,所有日志都被写入
    • error, info 的日志被丢弃
    • severe, infoerror 日志被丢弃,只有 severe 日志被写入
  • Compress: 是否压缩日志文件,只在 file 模式下工作
  • KeepDays:日志文件被保留多少天,在给定的天数之后,过期的文件将被自动删除。对 console 模式没有影响
  • tackCooldownMillis:多少毫秒后再次写入堆栈跟踪。用来避免堆栈跟踪日志过多
  • MaxBackups: 多少个日志文件备份将被保存。0代表所有备份都被保存。当Rotation被设置为size时才会起作用。注意:KeepDays选项的优先级会比MaxBackups高,即使MaxBackups被设置为0,当达到KeepDays上限时备份文件同样会被删除。
  • MaxSize: 当前被写入的日志文件最大可占用多少空间。0代表没有上限。单位为MB。当Rotation被设置为size时才会起作用。
  • Rotation: 日志轮转策略类型。默认为daily(按天轮转)。
    • daily 按天轮转。
    • size 按日志大小轮转。

方法介绍:

  • Error, Info, Slow: 将任何类型的信息写进日志,使用 fmt.Sprint(...) 来转换为 string
  • Errorf, Infof, Slowf: 将指定格式的信息写入日志
  • Errorv, Infov, Slowv: 将任何类型的信息写入日志,用 json marshal 编码
  • Errorw, Infow, Sloww: 写日志,并带上给定的 key:value 字段
  • WithContext:将给定的 ctx 注入日志信息,例如用于记录 trace-idspan-id
  • WithDuration: 将指定的时间写入日志信息中,字段名为 duration

logx快速使用示例:

package mainimport "github.com/zeromicro/go-zero/core/logx"func main() {logx.Info("服务启动...")logx.Errorf("出现错误: %v", "连接失败")
}

在这里插入图片描述
注意:如果不现实设置,默认采用console模式,输出到控制台。


1.2、日志初始化与配置

package mainimport "github.com/zeromicro/go-zero/core/logx"func main() {logx.MustSetup(logx.LogConf{ServiceName: "user-api",Mode:        "file",Path:        "./logs",Level:       "info",KeepDays:    7,Encoding:    "plain",})defer logx.Close()logx.Info("服务初始化完成")
}

1.3、常用方法

在这里插入图片描述

package mainimport "github.com/zeromicro/go-zero/core/logx"func main() {logx.Info("服务器初始化完成...")logx.Infof("%s", "服务器初始化完成...")logx.Debug(1, 2, 3, []int{1, 2, 3}, "hello world")logx.Debugf("测试%s-%d", "DEBUG", 1)logx.Error("错误日志-1", "错误日志-2")logx.Errorf("%s-%d", "错误日志", 3)logx.Alert("严重警告日志...")
}

在这里插入图片描述


1.4、配合defer捕获panic

package mainimport "github.com/zeromicro/go-zero/core/logx"func test() {defer func() {if err := recover(); err != nil {logx.Error(err)}}()panic("出错...")
}func main() {test()
}

2、正则处理

Golang中通过regexp包支持正则表达式操作,使用前需要导入该包。

import "regexp"

2.1、正则表达式语法大全

在这里插入图片描述

在这里插入图片描述

2.2、基本匹配

使用regexp.MatchString()函数来判断是否含有对应的字符串或数组。
在这里插入图片描述
其中第一个参数是正则表达式,第二参数表示要匹配的字符串。

简单匹配字符串:

package mainimport ("fmt""regexp"
)func main() {str := "hello,world"ok, _ := regexp.MatchString("hello", str)if ok {fmt.Println("字符串中包含hello")} else {fmt.Println("字符串中不包含hello")}
}

匹配字符串中是否包含数字:

package mainimport ("fmt""regexp"
)func main() {str := "cost: ¥20"ok, _ := regexp.MatchString("[0-9]+", str)if ok {fmt.Println("字符串中包含数字...")} else {fmt.Println("字符串中不包含数字...")}
}

2.3、常见函数使用

一般还会配合 regexp.MustCompile 来使用,传入一个正则表达式,返回一个 *MustCompile 对象。调用该函数要保证正则表达式是正确的,否则直接引发panic。

1、FindAllString:查找所有匹配数字返回

package mainimport ("fmt""regexp"
)func main() {str := "今日消费内容: ¥20, ¥10, ¥15, ¥5, ¥55"re := regexp.MustCompile(`\d+`)slice := re.FindAllString(str, -1)fmt.Println(slice)
}

在这里插入图片描述
第二个参数表示匹配的数量n,如果传入<0的数表示没有数量限制。

2、FindString:查找第一个匹配的子串

package mainimport ("fmt""regexp"
)func main() {str := "123 abc 456"re := regexp.MustCompile(`\d+`)res := re.FindString(str)fmt.Println(res) // 123
}

3、FindStringSubmatch:返回匹配的子串和分组

package mainimport ("fmt""regexp"
)func main() {str := "日期: 2025-06-06"re := regexp.MustCompile(`(\d{4})-(\d{2})-(\d{2})`)slice := re.FindStringSubmatch(str)for k, v := range slice {fmt.Printf("slice[%d]: %v\n", k, v)}
}

在这里插入图片描述

4、SubexpNames:命名并编号的捕获分组

package mainimport ("fmt""regexp"
)func main() {str := "今日日期: 2025-06-06"re := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)res := re.FindStringSubmatch(str)names := re.SubexpNames()for i, name := range names {if i > 0 {fmt.Printf("%s: %s\n", name, res[i])}}}

在这里插入图片描述
注意:由于FindStringSubmatch返回的是匹配串和对应分组,所以下标应该从1开始。

5、ReplaceAllString:字符串替换

package mainimport ("fmt""regexp"
)func main() {str := "今日消费: ¥20, ¥30, ¥10, ¥5, ¥15"re := regexp.MustCompile(`\d+`)res := re.ReplaceAllString(str, "**")fmt.Println(res)
}

在这里插入图片描述

6、Split:按正则分割字符串

package mainimport ("fmt""regexp"
)func main() {re := regexp.MustCompile(`[,\s;]+`)parts := re.Split("a, b; c d", -1)fmt.Println(parts) // [a b c d]
}

在这里插入图片描述


2.4、从html提取汉字demo

package mainimport ("fmt""io""os""regexp"
)func main() {file, err := os.Open("index.html")defer file.Close()if err != nil {fmt.Println(err)return}var str []bytevar tmp = make([]byte, 128)for {n, err := file.Read(tmp)if err == io.EOF {break}if err != nil {fmt.Println(err)}str = append(str, tmp[:n]...)}re := regexp.MustCompile(`[\p{Han}]+`)slice := re.FindAllString(string(str), -1)var res stringfor _, v := range slice {res += v}fmt.Println("提取出的中文内容:", res)
}

在这里插入图片描述


文章转载自:

http://NIqkzAhO.mmjqk.cn
http://QKEhsGjt.mmjqk.cn
http://hq5riBjq.mmjqk.cn
http://7RIUhwDH.mmjqk.cn
http://R6Twt7gP.mmjqk.cn
http://F7sz5SCu.mmjqk.cn
http://w1G9LUEA.mmjqk.cn
http://JOhQHSp9.mmjqk.cn
http://6NAvExPu.mmjqk.cn
http://UucHYLGe.mmjqk.cn
http://AENHPsTV.mmjqk.cn
http://KwkEcuPu.mmjqk.cn
http://gOCdpRHm.mmjqk.cn
http://qEbXiHXP.mmjqk.cn
http://Mm28k6V2.mmjqk.cn
http://PAQoLMMZ.mmjqk.cn
http://dwYLyR8t.mmjqk.cn
http://fldIG9KA.mmjqk.cn
http://ek0zPuk7.mmjqk.cn
http://Jero4U6e.mmjqk.cn
http://7bF2Mx5v.mmjqk.cn
http://hToya6WK.mmjqk.cn
http://FToCgEmW.mmjqk.cn
http://27y0fnLA.mmjqk.cn
http://rOeu3dRc.mmjqk.cn
http://5J8Cb7Wc.mmjqk.cn
http://K1r92pKZ.mmjqk.cn
http://854aFtUu.mmjqk.cn
http://euTcQ6ZP.mmjqk.cn
http://6ym51WZb.mmjqk.cn
http://www.dtcms.com/wzjs/689170.html

相关文章:

  • 四川红叶建设有限公司网站六安网站制作多少钱
  • 贵州城乡住房建设部网站网站流量流出异常
  • 长寿做网站专业教育网站建设
  • 网站开发容易找工作吗深圳品牌男装有哪些
  • 吴江和城乡建设局网站龙岗召开企业服务大会
  • 商丘网站建设价格小广告推广网站
  • 常州市金坛建设局网站如何做网站域名备案
  • 贵州省城乡建设部网站首页怎么申请商标品牌
  • 桥梁建设 网站网站 展示板
  • 一锅汤资源网站建设大全南京和筑建设有限公司网站
  • 最优的网站建设推广网站怎么才能被百度收录
  • 河北远策网站建设wordpress作者增加分类插件
  • 呼市做网站公司响应式网站 图片处理
  • 网站关键词排名怎么做计算机语言python
  • 展示图片的网站模板2021年经典营销案例
  • 建立网站时间网站模版好建设吗
  • 建设厅工作证查询网站蓝色的网站
  • 河南网站seo费用长沙网站建设 鼎誉
  • 专业网站制作地址企业网站模板是什么
  • 建站公司会有多大的坑邯郸网站设计怎么做
  • 徐州网站无障碍建设网站开发开题报告范文2019
  • 一级做爰片c视频网站火车头导入wordpress
  • 网站建设用的什么语言lumen wordpress 下载
  • 漳州网站设计制作安卓html编辑器
  • 广州市从化区住房和建设据网站做机器人的网站
  • php网站开发需要学什么沈阳市网站建设报价
  • 网站推广渠道特点自建网站如何备案
  • 枞阳县建设局网站怎么做网站播放器
  • ps网站头部seo的网站
  • 网站建设首选九零后网络网店推广的目的