百度推广 网站要备案吗,国外网站怎么建设,网络推广员一个月多少钱,做网站推广销售产品上回书说到#xff0c;flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段#xff0c;日志一直都是非常重要的一个环节#xff0c;我们也应该养成在程序中记录日志的好习惯。 文章目录 log配置logger配置日志前缀配置日志输出位置自定义logger …上回书说到flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段日志一直都是非常重要的一个环节我们也应该养成在程序中记录日志的好习惯。 文章目录 log配置logger配置日志前缀配置日志输出位置自定义logger log
Go语言内置的log包实现了简单的日志服务。 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的日志。)
}}结果
2017/06/19 14:04:17 这是一条很普通的日志。
2017/06/19 14:04:17 这是一条很普通的日志。logger会打印每条日志信息的日期、时间默认输出到系统的标准错误。 - Fatal系列函数会在写入日志信息后调用os.Exit(1) - Panic系列函数会在写入日志信息后panic。
配置logger
默认情况下的logger只会提供日志的时间信息但是很多情况下我们希望得到更多信息比如记录该日志的文件名和行号等。
log标准库中为我们提供了定制这些设置的方法。
log标准库中的Flags函数会返回标准logger的输出配置而SetFlags函数用来设置标准logger的输出配置。
func Flags() int
func SetFlags(flag int)const (// 控制输出日志信息的细节不能控制输出的顺序和格式。// 输出的日志在每一项后会有一个冒号分隔例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: messageLdate 1 iota // 日期2009/01/23Ltime // 时间01:23:23Lmicroseconds // 微秒级别的时间01:23:23.123123用于增强Ltime位Llongfile // 文件全路径名行号 /a/b/c/d.go:23Lshortfile // 文件名行号d.go:23会覆盖掉LlongfileLUTC // 使用UTC时间LstdFlags Ldate | Ltime // 标准logger的初始值
)源码 有这么多信息所以我们需要选取我们自己要用的
func main() {//这个就是我们设置输出的日志格式log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)log.Println(这是一条很普通的日志。)
}配置日志前缀
func Prefix() string
func SetPrefix(prefix string)Prefix函数用来查看标准logger的输出前缀SetPrefix函数用来设置输出前缀
这样我们就能够在代码中为我们的日志信息添加指定的前缀方便之后对日志信息进行检索和处理。
配置日志输出位置
func SetOutput(w io.Writer)SetOutput函数用来设置标准logger的输出目的地默认是标准错误输出。(其实就是日志的持久化就是用一种方式保存起来。方便出现一些宕机服务器奔溃使得整个信息错误信息消失)
自定义logger
log标准库中还提供了一个创建新logger对象的构造函数–New支持我们创建自己的logger
func New(out io.Writer, prefix string, flag int) *LoggerNew创建一个Logger对象。其中参数out设置日志信息写入的目的地。参数prefix会添加到生成的每一条日志前面。参数flag定义日志的属性时间、文件等等。
import (logos
)func main() {logger : log.New(os.Stdout, New, log.Lshortfile|log.Ldate|log.Ltime)logger.Println(这是自定义的logger记录的日志。)} Go内置的log库功能有限例如无法满足记录不同级别日志的情况我们在实际的项目中根据自己的需要选择使用第三方的日志库如logrus、zap等