欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang 日志處理和正則處理的操作方法

 更新時間:2025年06月09日 11:31:23   作者:初次見面我叫泰隆  
這篇文章主要介紹了Golang 日志處理和正則處理的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

1、logx日志處理

1.1、logx簡介

logxgo-zero 框架中用于日志記錄的核心包,具有以下特點:

  • 統(tǒng)一日志格式(帶時間、級別、調(diào)用棧)
  • 自動日志切割
  • 支持多種日志輸出模式(控制臺、文件、volume)
  • 支持鏈路追蹤(context 支持)
  • 支持日志等級控制(debug/info/error/alert)
  • 內(nèi)建 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:設(shè)置服務(wù)名稱,可選。在 volume 模式下,該名稱用于生成日志文件。在 rest/zrpc 服務(wù)中,名稱將被自動設(shè)置為 rest 或 zrpc 的名稱。
  • Mode:輸出日志的模式,默認是 console
  • console 模式將日志寫到 stdout/stderr
  • file 模式將日志寫到 Path 指定目錄的文件中
  • volume 模式在 docker 中使用,將日志寫入掛載的卷中
  • Encoding: 指示如何對日志進行編碼,默認是 json
  • json模式以 json 格式寫日志
  • plain模式用純文本寫日志,并帶有終端顏色顯示
  • TimeFormat:自定義時間格式,可選。默認是 2006-01-02T15:04:05.000Z07:00
  • Path:設(shè)置日志路徑,默認為 logs
  • Level: 用于過濾日志的日志級別。默認為 info
    • info,所有日志都被寫入
    • error, info 的日志被丟棄
    • severe, info 和 error 日志被丟棄,只有 severe 日志被寫入
  • Compress: 是否壓縮日志文件,只在 file 模式下工作
  • KeepDays:日志文件被保留多少天,在給定的天數(shù)之后,過期的文件將被自動刪除。對 console 模式?jīng)]有影響
  • tackCooldownMillis:多少毫秒后再次寫入堆棧跟蹤。用來避免堆棧跟蹤日志過多
  • MaxBackups: 多少個日志文件備份將被保存。0代表所有備份都被保存。當Rotation被設(shè)置為size時才會起作用。注意:KeepDays選項的優(yōu)先級會比MaxBackups高,即使MaxBackups被設(shè)置為0,當達到KeepDays上限時備份文件同樣會被刪除。
  • MaxSize: 當前被寫入的日志文件最大可占用多少空間。0代表沒有上限。單位為MB。當Rotation被設(shè)置為size時才會起作用。
  • Rotation: 日志輪轉(zhuǎn)策略類型。默認為daily(按天輪轉(zhuǎn))。
  • daily 按天輪轉(zhuǎn)。
  • size 按日志大小輪轉(zhuǎn)。

方法介紹:

Error, Info, Slow: 將任何類型的信息寫進日志,使用 fmt.Sprint(...) 來轉(zhuǎn)換為 string
Errorf, Infof, Slowf: 將指定格式的信息寫入日志
Errorv, Infov, Slowv: 將任何類型的信息寫入日志,用 json marshal 編碼
Errorw, Infow, Sloww: 寫日志,并帶上給定的 key:value 字段
WithContext:將給定的 ctx 注入日志信息,例如用于記錄 trace-id 和 span-id
WithDuration: 將指定的時間寫入日志信息中,字段名為 duration

logx快速使用示例:

package main
import "github.com/zeromicro/go-zero/core/logx"
func main() {
	logx.Info("服務(wù)啟動...")
	logx.Errorf("出現(xiàn)錯誤: %v", "連接失敗")
}

注意:如果不現(xiàn)實設(shè)置,默認采用console模式,輸出到控制臺。

1.2、日志初始化與配置

package main
import "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("服務(wù)初始化完成")
}

1.3、常用方法

package main
import "github.com/zeromicro/go-zero/core/logx"
func main() {
	logx.Info("服務(wù)器初始化完成...")
	logx.Infof("%s", "服務(wù)器初始化完成...")
	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 main
import "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包支持正則表達式操作,使用前需要導(dǎo)入該包。

import "regexp"

2.1、正則表達式語法大全

2.2、基本匹配

使用regexp.MatchString()函數(shù)來判斷是否含有對應(yīng)的字符串或數(shù)組。

其中第一個參數(shù)是正則表達式,第二參數(shù)表示要匹配的字符串。

簡單匹配字符串:

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

匹配字符串中是否包含數(shù)字:

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

2.3、常見函數(shù)使用

一般還會配合 regexp.MustCompile 來使用,傳入一個正則表達式,返回一個 *MustCompile 對象。調(diào)用該函數(shù)要保證正則表達式是正確的,否則直接引發(fā)panic。

1、FindAllString:查找所有匹配數(shù)字返回

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

第二個參數(shù)表示匹配的數(shù)量n,如果傳入<0的數(shù)表示沒有數(shù)量限制。

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

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

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

package main
import (
	"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 main
import (
	"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返回的是匹配串和對應(yīng)分組,所以下標應(yīng)該從1開始。

5、ReplaceAllString:字符串替換

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

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

package main
import (
	"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 main
import (
	"fmt"
	"io"
	"os"
	"regexp"
)
func main() {
	file, err := os.Open("index.html")
	defer file.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	var str []byte
	var 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 string
	for _, v := range slice {
		res += v
	}
	fmt.Println("提取出的中文內(nèi)容:", res)
}

到此這篇關(guān)于Golang 日志處理和正則處理的文章就介紹到這了,更多相關(guān)Golang 日志處理和正則處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go 自定義package包設(shè)置與導(dǎo)入操作

    Go 自定義package包設(shè)置與導(dǎo)入操作

    這篇文章主要介紹了Go 自定義package包設(shè)置與導(dǎo)入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang中時間格式化的實現(xiàn)詳解

    Golang中時間格式化的實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了Go語言中進行時間進行格式化的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09
  • golang通過gorm操作sqlite設(shè)置主鍵自增的步驟

    golang通過gorm操作sqlite設(shè)置主鍵自增的步驟

    這篇文章主要介紹了golang通過gorm操作sqlite設(shè)置主鍵自增的詳細步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Golang之reflect包的使用方法詳解

    Golang之reflect包的使用方法詳解

    Golang的Reflect包(reflect)是一個強大的內(nèi)置包,它提供了在運行時進行程序反射的功能,幫助我們編寫更加靈活、通用且動態(tài)的代碼,為Golang開發(fā)者帶來了更多的可能性,感興趣的同學(xué)可以參考一下
    2023-06-06
  • Go模板后端渲染時vue單頁面沖突

    Go模板后端渲染時vue單頁面沖突

    go后端模版語法是通過 {{}} ,vue也是通過雙花括號來渲染的,如果使用go渲染vue的html頁面的時候就會報錯,本文主要介紹了Go模板后端渲染時vue單頁面沖突,感興趣的可以了解一下
    2024-01-01
  • Go語言七篇入門教程四通道及Goroutine

    Go語言七篇入門教程四通道及Goroutine

    這篇文章主要為大家介紹了Go語言的通道及Goroutine示例詳解,本文是Go語言七篇入門系列篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Golang如何構(gòu)造最佳隨機密碼詳解

    Golang如何構(gòu)造最佳隨機密碼詳解

    人們往往有使用同一密碼的習(xí)慣,為了防止數(shù)據(jù)庫意外泄露/破壞和出于保護用戶隱私的目的,下面這篇文章主要給大家介紹了關(guān)于Golang如何構(gòu)造最佳隨機密碼的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • golang使用excelize庫操作excel文件的方法詳解

    golang使用excelize庫操作excel文件的方法詳解

    Excelize是Go語言編寫的用于操作Office Excel文檔基礎(chǔ)庫,基于ECMA-376,ISO/IEC 29500國際標準,下面這篇文章主要給大家介紹了關(guān)于golang使用excelize庫操作excel文件的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Go語言服務(wù)器開發(fā)實現(xiàn)最簡單HTTP的GET與POST接口

    Go語言服務(wù)器開發(fā)實現(xiàn)最簡單HTTP的GET與POST接口

    這篇文章主要介紹了Go語言服務(wù)器開發(fā)實現(xiàn)最簡單HTTP的GET與POST接口,實例分析了Go語言http包的使用技巧,需要的朋友可以參考下
    2015-02-02
  • Golang的性能優(yōu)化和調(diào)試技巧

    Golang的性能優(yōu)化和調(diào)試技巧

    在開發(fā)和部署Go語言應(yīng)用程序時,性能優(yōu)化和調(diào)試是至關(guān)重要的,篇博客將介紹一些常用的Golang性能優(yōu)化和調(diào)試技巧,幫助您提升應(yīng)用程序的性能并解決潛在的問題
    2023-05-05

最新評論