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")
}