golang log模块

128 阅读2分钟

log模块

log模块用于记录日志

// 记录失败信息,该信息回导致程序退出,后续的代码无法继续执行。defer代码不会被执行
log.Fatal("hello world")
// 抛出panic异常,defer代码可以被执行
log.Panic("hello world")
// 普通日志
log.Print("程序已经启动")
// 2022/07/20 21:08:33 程序已经启动

log配置文件

func Flags() int  // 返回标准log输出配置
func SetFlags(flag int)  // 设置标准log输出配置

该配置文件是一个整数类型。

const (
    // 控制输出日志信息的细节,不能控制输出的顺序和格式。
    // 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
    Ldate         = 1 << iota     // 日期:2009/01/23
    Ltime                         // 时间:01:23:23
    Lmicroseconds                 // 微秒级别的时间:01:23:23.123123(用于增强Ltime位)
    Llongfile                     // 文件全路径名+行号: /a/b/c/d.go:23
    Lshortfile                    // 文件名+行号:d.go:23(会覆盖掉Llongfile)
    LUTC                          // 使用UTC时间
    LstdFlags     = Ldate | Ltime // 标准logger的初始值
)

日志前缀

func Prefix() string  // 返回日志的前缀配置
func SetPrefix(prefix string)  // 设置日志前缀
	fmt.Println(log.Prefix())
	log.SetPrefix("公链客户端1.0 ")
	fmt.Println(log.Prefix())
	log.Print("程序启动了")
	log.Print("程序结束了")
	/*
		公链客户端1.0
		公链客户端1.0 2022/07/20 21:13:41 程序启动了
		公链客户端1.0 2022/07/20 21:13:41 程序结束了
	*/

日志保存到本地文件

	file, err := os.OpenFile("./client.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0750)
	if err != nil {
		fmt.Println("打开日志文件失败:", err)
		return
	}
	defer file.Close()
	log.SetOutput(file)
	log.Print("程序启动了")

自定义日志

//log
package log

import (
	"fmt"
	"log"
	"os"
)

func init() {
	fmt.Println("log 模块 初始化完成")
}

func Default(name ...string) *log.Logger {
	logFile, err := os.OpenFile("./client.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		log.Panic("打开日志文件异常")
	}
	var pre string
	if len(name) == 0 {
		pre = "应用 "
	} else {
		pre = name[0]
		pre += " "
	}
	logger := log.New(logFile, pre, log.Ldate|log.Ltime|log.Lshortfile)
	return logger
}

//main.go
package main

import (
	log "learncode/log"
)

func main() {
	MyLog := log.Default("客户端应用")
	MyLog.Print("Hello world")
}