Go中的log包
qingheluo2024-07-08清河洛200
Go的标准库中的log包实现了简单的日志服务本包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln]、Fatal[f|ln]和Panic[f|ln]访问,比手工创建一个Logger对象更容易使用。Logger会打印每条日志信息的日期、时间,默认输出到标准错误。输出的每行日志信息从左到右都包含三部分内容
1、输出前缀,自定义字符串,可以是任何字符串
2、一些预定义的信息,如日期、时间、文件名、行号等
3、日志的内容
其中第1和第三部分为自定义,第2部分是预定义的,在函数中以flag参数表示已经预定义的...
Go的标准库中的log包实现了简单的日志服务
本包定义了Logger类型,该类型提供了一些格式化输出的方法。
本包也提供了一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln]、Fatal[f|ln]和Panic[f|ln]访问,比手工创建一个Logger对象更容易使用。Logger会打印每条日志信息的日期、时间,默认输出到标准错误。
输出的每行日志信息从左到右都包含三部分内容
1、输出前缀,自定义字符串,可以是任何字符串 2、一些预定义的信息,如日期、时间、文件名、行号等 3、日志的内容
其中第1和第三部分为自定义,第2部分是预定义的,在函数中以flag参数表示
已经预定义的flag常量如下
Ldate = 1 << iota // 日期,如:2009/01/23 Ltime // 时间,如:01:23:23 Lmicroseconds // 微秒,如:01:23:23.123123 Llongfile // 全路径文件名和行号,如:/a/b/c/d.go:23 Lshortfile // 文件名和行号,如:d.go:23 (不含路径) LUTC // 采用UTC标准时间,默认是本地时间 Lmsgprefix // 将自定义字符串位置放置于日志信息的前面(三部分内容中1和2互换位置) LstdFlags = Ldate | Ltime // 默认的日志格式 多个值用“|”分隔,如:Ldate | Ltime | Lmicroseconds 多个值的顺序不重要,最后会按照预定义的顺序和预定义的格式输出
type Logger
type Logger struct {}
一个Logger表示一个活动的日志记录对象,它生成输出行并将其写入到io.Writer中
每次日志记录操作都会单独调用Writer的Write方法
Logger可以同时从多个goroutine中使用,并保证对Writer的访问是序列化的
获取Logger对象
Default() *Logger :返回标准Logger 标准Logger会将日志信息输出到标准错误,并带有日期、时间、文件名、行号等信息 New(out io.Writer, prefix string, flag int) *Logger 创建一个自定义Logger对象 out参数指定了日志信息的输出目标,可以是os.Stderr、os.Stdout或一个打开的文件 prefix参数指定了日志信息的前缀,可以是任意字符串 flag参数指定了日志信息的格式,如:Ldate | Ltime 示例 var LogFile, _ = os.OpenFile("run.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND|os.O_TRUNC, 0666) var Log = log.New(LogFile, "前缀测试", log.Ltime|log.Llongfile)
Logger对象的方法
由于log为我们提供了一个标准的Logger对象,所以可以直接使用包级别的函数来使用标准的Logger对象输出日志信息
使用方法和Logger对象的方法相同,只是不需要创建Logger对象,直接使用包级别的函数即可
常用的Logger对象的方法
Flags() int :获取当前Logger对象的flag值 SetFlags(flag int) :设置当前Logger对象的flag值 Prefix() string :获取当前Logger对象的输出前缀 SetPrefix(prefix string) :设置当前Logger对象的输出前缀 Writer() io.Writer :获取当前Logger对象的输出目标 SetOutput(w io.Writer) :设置当前Logger对象的输出目标 Fatal(v ...any) Fatalf(format string, v ...any) Fatalln(v ...any) Fatal系列函数会在写入日志信息后调用os.Exit(1) Panic(v ...any) Panicf(format string, v ...any) Panicln(v ...any) Panic系列函数会在写入日志信息后panic Print(v ...any) Printf(format string, v ...any) Println(v ...any) Output(calldepth int, s string) error 用于记录日志事件的输出 如果 s 的最后一个字符不是换行符会在其后追加一个换行符 Calldepth用于恢复程序计数器,其值应设置为2