聚焦资讯
服务于区块链创业者

Go 语言学习指南:配置日志的最佳实践

chatGPT账号

Go 语言学习指南:配置日志的最佳实践

一、日志三大类

创建项目并初始化用vscode 打开

~/Code/go via  v1.20.3 via  base
➜ mcd demo

Code/go/demo via  v1.20.3 via  base
➜ go mod init
go: cannot determine module path for source directory /Users/qiaopengjun/Code/go/demo (outside GOPATH, module path must be specified)

Example usage:
 'go mod init example.com/m' to initialize a v0 or v1 module
 'go mod init example.com/m/v2' to initialize a v2 module

Run 'go help mod init' for more information.

Code/go/demo via  v1.20.3 via  base
➜ go mod init demo  #  初始化当前文件夹, 创建go.mod文件
go: creating new go.mod: module demo

Code/go/demo via  v1.20.3 via  base
➜ c

Code/go/demo via  v1.20.3 via  base
➜

main.go 文件

package main

import "log"

func init() {

}

func main() {
 log.Println("1234")

 // log.Fatalln("1234")

 // log.Panicln("1234")
}


运行 log.Println

Code/go/demo via  v1.20.3 via  base 
➜ go run .        
2023/06/04 22:16:25 1234

Code/go/demo via  v1.20.3 via  base 
➜ 

main.go 文件

package main

import "log"

func init() {

}

func main() {
 // log.Println("1234")

 log.Fatalln("1234")

 // log.Panicln("1234")
}


运行 log.Fatalln

Code/go/demo via  v1.20.3 via  base 
➜ go run .
2023/06/04 22:17:45 1234
exit status 1

Code/go/demo via  v1.20.3 via  base 
➜ 

相当于

package main

import (
 "log"
 "os"
)

func init() {

}

func main() {
 // log.Println("1234")

 log.Fatalln("1234")
 os.Exit(1)

 // log.Panicln("1234")
}


main.go 文件

package main

import (
 "log"
)

func init() {

}

func main() {
 // log.Println("1234")

 // log.Fatalln("1234")
 // os.Exit(1)

 log.Panicln("1234")
}


运行 log.Panicln

Code/go/demo via  v1.20.3 via  base 
➜ go run .
2023/06/04 22:20:42 1234
panic: 1234


goroutine 1 [running]:
log.Panicln({0x14000092f58?, 0x0?, 0x1400004e768?})
        /usr/local/go/src/log/log.go:398 +0x64
main.main()
        /Users/qiaopengjun/Code/go/demo/main.go:17 +0x44
exit status 2

Code/go/demo via  v1.20.3 via  base 
➜ 

日志三大类

package main

import (
 "log"
)

func init() {

}

func main() {
 log.Println("1234")

 log.Fatalln("1234")

 log.Panicln("1234")

 log.Panic("1234")
 log.Panicf("1234, %d", 5678)
}


二、配置日志

设置前缀

package main

import (
 "log"
)

func init() {
 log.SetPrefix("LOG: ") // 设置前缀
}

func main() {
 log.Println("1234")

 // log.Fatalln("1234")

 // log.Panicln("1234")

 // log.Panic("1234")
 // log.Panicf("1234, %d", 5678)
}


运行

Code/go/demo via  v1.20.3 via  base 
➜ go run .
LOG: 2023/06/04 22:26:08 1234

Code/go/demo via  v1.20.3 via  base 
➜ 

设置输出

package main

import (
 "log"
 "os"
)

func init() {
 log.SetPrefix("LOG: ") // 设置前缀

 f, err := os.OpenFile("./log.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
 if err != nil {
  log.Fatalf("open log file failed with error: %v", err)
 }
 log.SetOutput(f) // 设置输出
}

func main() {
 log.Println("1234")

 // log.Fatalln("1234")

 // log.Panicln("1234")

 // log.Panic("1234")
 // log.Panicf("1234, %d", 5678)
}


运行

Code/go/demo via  v1.20.3 via  base 
➜ go run .

Code/go/demo via  v1.20.3 via  base 
➜ 

log.log

LOG: 2023/06/04 22:32:00 1234


设置 flag

main.go 文件

package main

import (
 "log"
 "os"
)

func init() {
 log.SetPrefix("LOG: ") // 设置前缀

 f, err := os.OpenFile("./log.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
 if err != nil {
  log.Fatalf("open log file failed with error: %v", err)
 }
 log.SetOutput(f) // 设置输出

 log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)

 // const (
 //  Ldate         = 1 << iota // 1 << 0 = 000000001 = 1
 //  Ltime                     // 1 << 1 = 000000010 = 2
 //  Lmicroseconds             // 1 << 2 = 000000100 = 4
 //  Llongfile                 // 1 << 3 = 000001000 = 8
 //  Lshortfile                // 1 << 4 = 000010000 = 16
 //  ...
 // )
}

func main() {
 log.Println("1234")

 // log.Fatalln("1234")

 // log.Panicln("1234")

 // log.Panic("1234")
 // log.Panicf("1234, %d", 5678)
}

源码

const (
 Ldate         = 1 << iota     // the date in the local time zone: 2009/01/23
 Ltime                         // the time in the local time zone: 01:23:23
 Lmicroseconds                 // microsecond resolution: 01:23:23.123123.  assumes Ltime.
 Llongfile                     // full file name and line number: /a/b/c/d.go:23
 Lshortfile                    // final file name element and line number: d.go:23. overrides Llongfile
 LUTC                          // if Ldate or Ltime is set, use UTC rather than the local time zone
 Lmsgprefix                    // move the "prefix" from the beginning of the line to before the message
 LstdFlags     = Ldate | Ltime // initial values for the standard logger 默认flag
)

运行

Code/go/demo via  v1.20.3 via  base 
➜ go run .

Code/go/demo via  v1.20.3 via  base 
➜ 

log.log

LOG: 2023/06/04 22:32:00 1234
LOG: 2023/06/04 22:43:12.984321 /Users/qiaopengjun/Code/go/demo/main.go:30: 1234
免责声明

发文时比特币价格:$71249

免责声明:

本文不代表行至网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至区块链研究院声明:行至区块链研究院内容由行至网发布,部分来源于互联网和行业分析师投稿收录,内容为行至区块链研究院加盟专职分析师独立观点,不代表行至网立场。

chatGPT账号
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,未经允许不得转载。
文章名称:《Go 语言学习指南:配置日志的最佳实践》
文章链接:https://www.xingzhi.io/webthree/35321.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的区块链世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录后才能复制或下载网站内容