【go 日志模板】go自动生成日志模板函数

Go 语言中的日志模块非常强大,可以帮助我们方便地记录程序运行时的信息和错误。在这篇博客中,我们将介绍如何使用 Go 语言的日志模块来记录程序运行时的信息和错误。

我们使用了不同的日志级别来记录不同严重程度的信息。Debug 级别的日志信息用于调试程序,Info 级别的日志信息用于记录一般运行情况,Warning 级别的日志信息用于记录可能出现问题的情况,Error 级别的日志信息用于记录错误信息,而 Fatal 级别的日志信息则会导致程序立即退出

你可以使用Go标准库中的log包来实现日志记录功能。下面是根据自己自定义格式,生成info_20230414.log 格式日志的模板文件。

loggers.go 文件内容如下:

package utils

import (
	"fmt"
	"log"
	"os"
	"sync"
	"time"
)


var (
	once sync.Once
	f *os.File
)


// 获取当前时间戳,格式为[--日 时::]
func getTimeStamp() string {
    
    
	return time.Now().Format("2006-01-02 15:04:05")
}


// 记录info级别的日志,带时间戳
func Info(message string) {
    
    
	// 保证只执行一次,打开日志文件并保存文件句柄到f变量
	once.Do(func() {
    
    
		// 生成日志文件名,格式为 "info_20230327.log"
		logFileName := "./log/info_" + time.Now().Format("20060102") + ".log"

		// 打开一个日志文件
		var err error
		f, err = os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		if err != nil {
    
    
			log.Fatal(err)
		}

		// 设置日志输出到文件
		log.SetOutput(f)

		// 设置日志前缀和格式
		log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime))
	})
	defer f.Close()
	// 在日志信息前加上时间戳,之后记录日志
	res:="["+getTimeStamp()+"]"+"  "+fmt.Sprintf(message)
	log.Printf(res)
}



// 记录Debug级别的日志,带时间戳
func Debug(message string) {
    
    
	// 保证只执行一次,打开日志文件并保存文件句柄到f变量
	once.Do(func() {
    
    
		// 生成日志文件名,格式为 "debug_20230327.log"
		logFileName := "./log/debug_" + time.Now().Format("20060102") + ".log"

		// 打开一个日志文件
		var err error
		f, err = os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		if err != nil {
    
    
			log.Fatal(err)
		}
		// 设置日志输出到文件
		log.SetOutput(f)

		// 设置日志前缀和格式
		log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime))
	})
	defer f.Close()
	// 在日志信息前加上时间戳,之后记录日志
	res:="["+getTimeStamp()+"]"+"  "+fmt.Sprintf(message)
	log.Printf(res)

}


// 记录Warn级别的日志,带时间戳
func Warn(message string) {
    
    
	// 保证只执行一次,打开日志文件并保存文件句柄到f变量
	once.Do(func() {
    
    
		// 生成日志文件名,格式为 "warn_20230327.log"
		logFileName := "./log/warn_" + time.Now().Format("20060102") + ".log"

		// 打开一个日志文件
		var err error
		f, err = os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		if err != nil {
    
    
			log.Fatal(err)
		}

		// 设置日志输出到文件
		log.SetOutput(f)

		// 设置日志前缀和格式
		log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime))
	})
	defer f.Close()  // 延迟执行 file.Close() 方法
	// 在日志信息前加上时间戳,之后记录日志
	res:="["+getTimeStamp()+"]"+"  "+fmt.Sprintf(message)
	log.Printf(res)
}


// 记录Warn级别的日志,带时间戳
func Error(message string) {
    
    
	// 保证只执行一次,打开日志文件并保存文件句柄到f变量
	once.Do(func() {
    
    
		// 生成日志文件名,格式为 "error_20230327.log"
		logFileName := "./log/error_" + time.Now().Format("20060102") + ".log"

		// 打开一个日志文件
		var err error
		f, err = os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		if err != nil {
    
    
			log.Fatal(err)
		}

		// 设置日志输出到文件
		log.SetOutput(f)

		// 设置日志前缀和格式
		log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime))
	})
	defer f.Close()  // 延迟执行 file.Close() 方法
	// 在日志信息前加上时间戳,之后记录日志
	res:="["+getTimeStamp()+"]"+"  "+fmt.Sprintf(message)
	log.Printf(res)
}


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013421629/article/details/130153689
go
今日推荐