在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Go语言标准库中的log该如何理解

179次阅读
没有评论

共计 3624 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章给大家介绍 Go 语言标准库中的 log 该如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Go 语言标准库中的 log 介绍
1.log
1.1 使用 Logger
log 包定义了 Logger 类型,该类型提供了一些格式化输出的方法。
本包也提供了一个预定义的 标准 logger, 可以通过调用 Print 系列(Print|Printf|Println)、Fatal 系列(Fatal|Fatalf|fatalln)和 Panic 系列(Panic|Panicf|PanicLn)来使用,比自行创建一个 logger 对象更容易使用。
例如:我们可以像下面的代码一样,直接通过 log 包来调用上岸提到的方法,默认它们会把日志信息大隐刀终端界面。

package mainimport (    log)func main() {    log.Println( 这是一条很普通的日志。)    v := 很普通的    log.Printf(这是一条 %s 日志。\n , v)    log.Fatalln(这是一条会触发 fatal 的日志。)    log.Panicln(这是一条会触发 panic 的日志。)}结果:2020/02/06 21:57:13 这是一条很普通的日志。2020/02/06 21:57:13 这是一条很普通的日志。2020/02/06 21:57:13 这是一条会触发 fatal 的日志。Process finished with exit code 1

logger 会打印每条日志信息的日期、时间,默认输出到系统的标准错误。
Fatal 系列函数会写入日志信息后调用 os.Exit(1)。
Panic 系列函数会在写入日志信息后 panic。
1.2 配置 logger
1.2.1 标准 logger 的配置
默认情况下的 logger 只会提供日志的时间信息,但是很多情况下,我们希望得到更多信息,比如记录该日志的文件名和行号等。
log 标准库中为我们提供了定制这些设置的方法。
log 标准库中的 Flags 函数会返回标准 logger 的输出配置,而 SetFlags 函数是用来设置标准 logger 的输出配置。
func Flags() int
func SetFlags(flag int)
flag 选项
log 标准库提供了如下的 flag 选项,它们是一系列定义好的常量。
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 的初始值
)

package mainimport (    log)func main() {    // 设置 logger    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println(这是一条很普通的日志。)}结果:2020/02/06 22:20:40.508109 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 这是一条很普通的日志。Process finished with exit code 0

1.2.2 配置日志前缀
log 标准库中还提供了关于日志信息前缀的两个方法:
func Prefix() string // 查看标准 logger 的输出前缀
func SetPrefix(prefix string) // 设置输出前缀

package mainimport (    log)func main() {    // 设置 logger    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println(这是一条很普通的日志。)    log.SetPrefix([前缀信息] )    log.Println(这是一条很普通的日志。)}结果:2020/02/06 22:25:27.654416 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 这是一条很普通的日志。[前缀信息]2020/02/06 22:25:27.654601 /Users/tongchao/Desktop/gopath/src/test/test.go:12: 这是一条很普通的日志。Process finished with exit code 0

这样可以在日志信息中添加指定的前缀,方便之后对日志信息进行检索和处理。
1.2.3 配置日志输出位置
func SetOutput(w io.Writer)

setOutput 函数用来设置标准 logger 的输出目的地,默认是标准错误输出。
把日志输出到同目录下的 xx.log 文件中。

package mainimport (    fmt     log     os)func main() {    logFile, err := os.OpenFile( ./xx.log , os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)    if err != nil {       fmt.Println( open log file failed, err: , err)        return    }    log.SetOutput(logFile)    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println(这是一条很普通的日志。)    log.SetPrefix([前缀信息] )    log.Println(这是一条很普通的日志。)}

结果:
xx.log 中内容为
2020/02/06 22:30:22.369892 /Users/tongchao/Desktop/gopath/src/test/test.go:17: 这是一条很普通的日志。
[前缀信息]2020/02/06 22:30:22.370229 /Users/tongchao/Desktop/gopath/src/test/test.go:19: 这是一条很普通的日志。
如果要使用标准的 logger,会把上面的配置操作写到 init 函数中

func init() {    logFile, err := os.OpenFile( ./xx.log , os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)    if err != nil {       fmt.Println( open log file failed, err: , err)        return    }    log.SetOutput(logFile)    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)}

1.3 创建 logger
log 标准库中还提供了创建新 logger 对象的构造函数 New,支持我们自己创建 logger 示例。
New 函数的签名如下:
func New(out io.Writer, prefix string, flag int) *Logger
New 创建一个 Logger 对象。其中,参数 out 设置日志信息写入的目的地。参数 prefix 会添加到生成的每一条日志前面。参数 flag 定义日志的属性(时间、文件等等)。

package mainimport (    log     os)func main() {    logger := log.New(os.Stdout, New , log.Lshortfile|log.Ldate|log.Ltime)    logger.Println(这是自定义的 logger 记录的日志。)}

结果:
New 2020/02/06 22:34:17 test.go:10: 这是自定义的 logger 记录的日志。

Process finished with exit code 0
Go 内置的 log 库功能有限,不能满足不同级别日志的情况,我们在实际的项目中根据自己的需要选择第三方日志库,如 logrus–https://github.com/sirupsen/logrus,zap–https://github.com/uber-go/zap 等

关于 Go 语言标准库中的 log 该如何理解就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计3624字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久久久成人片免费观看蜜芽 | 国产特黄1级毛片 | 少妇人妻好深太紧了 | 中文字幕日本最新乱码视频 | 91精品乱码一区二区三区 | 国产成人精品在线观看 | 国产精品成人一区二区三区 | 欧美综合自拍亚洲综合图片区 | 国产三级久久 | 久久精品欧美日韩精品 | 日本aaaa片毛片免费 | 久久久亚洲精华液精华液精华液 | 精品国产第一国产综合精品gif | 久久久久av综合网成人 | 国产av国片偷人妻麻豆 | 日韩成人无码影院 | 妞干网这里只有精品 | 欧美综合自拍亚洲综合百度 | 亚洲精品久久久中文字 | 最近中文字幕mv在线资源 | 久久久久人妻一区二区三区vr | 黄网在线 | 国产精品v免费视频 | 麻豆人妻无码性色av专区 | 亚洲男女| 国产精品久久久久久亚洲色 | 久久在视频 | 亚洲欧洲一区二区 | 天堂√最新版中文在线地址 | 99影视网 | 久久亚洲精品成人777大小说 | 欧美一级在线播放 | 免费 高清 日本1在线观看 | 玖玖国产精品视频 | 日本人一级毛片免费视频 | 国产精品第一国产精品 | 一边吃奶一边添p好爽高清视频 | 992tv在线影视永久免费 | 欧美蜜桃臀在线观看一区 | 少妇爽到呻吟的视频 | 精品国产一区二区三区不卡在线 |