Featured image of post golang学习十九:日志

golang学习十九:日志

日志简介

  • 使用开发工具时,控制台打印的信息就是日志信息
  • 项目最终发布后是没有开发工具的,而需要记录日志应该把信息输出到文件中,这个功能也是日志的功能
  • 在Go语言标准的log包提供了对日志的支持
  • 有三种级别日志输出
    • Print() 输出日志信息
    • Panic() 打印日志信息,并触发panic,日志信息为Panic信息
    • Fatal() 打印日志信息后调用os.Exit(1)
  • 所有日志信息打印时都带有时间,且颜色为红色
  • 每种级别日志打印都提供了三个函数
    • Println()
    • Print()
    • Printf()
  • 日志文件扩展名为log

普通日志信息打印

  • 官方源码如下
1
2
3
func Println(v ...interface{}) {
	std.Output(2, fmt.Sprintln(v...))
}
  • 直接使用log包调用Println()即可
1
log.Println("打印日志信息")

Panic日志信息打印

  • 通过源码可以看出在日志信息打印后调用了panic()函数,且日志信息为panic信息
1
2
3
4
5
6
// Panicln is equivalent to Println() followed by a call to panic().
func Panicln(v ...interface{}) {
	s := fmt.Sprintln(v...)
	std.Output(2, s)
	panic(s)
}
  • 执行后输出日志信息,同时也会触发panic
1
log.Panicln("打印日志信息")

致命日志信息

  • 打印日志后,终止程序
1
2
3
4
5
// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v ...interface{}) {
	std.Output(2, fmt.Sprint(v...))
	os.Exit(1)
}
  • 执行日志打印后,程序被终止
1
log.Fatal("打印日志信息")

打印日志信息到文件中

  • Go语言标准库支持输出日志信息到文件中.
  • 输出日志时的几种状态
1
2
3
4
5
6
7
8
9
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
	LstdFlags     = Ldate | Ltime // initial values for the standard logger
)
  • 代码如下
1
2
3
4
	f, _ := os.OpenFile("D:/golog.log", os.O_APPEND|os.O_CREATE, 07777)
	defer f.Close()
	logger := log.New(f, "[info]\t", log.Ltime)
	logger.Println("输出日志信息")

golang学习一:从环境配置开始到HelloWorld入门 golang学习二:golang自带的工具 olang学习三:golang基础语法 golang学习四:流程控制 golang学习五:常用数学函数与数组 golang学习六:for循环 golang学习七:goto和label golang学习八:切片 golang学习九:sort包、map、双向链表、双向循环链表 golang学习十:函数 golang学习十一:包的访问权限、变量作用域、闭包 golang学习十二:值传递和引用传递 golang学习十三:结构体 golang学习十四:golang中的面向对象 golang学习十五:错误异常处理 golang学习十六:文件操作 golang学习十七:反射 golang学习十八:XML操作 golang学习十九:日志 golang学习二十:golang并发编程入门 golang学习二十一:select和GC

Licensed under CC BY-NC-SA 4.0