注册 登录

清河洛

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


网址导航