go语言碎片整理之标准库log

无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直是很重要的环节,我们也应该养成在程序中记录日志的好习惯。

log

Go语言内置的log包实现了简单的日志服务。本文介绍了标准库log的基本使用。

使用Logger

log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。
例如,我们可以像下面的代码一样直接通过log包调用上面提到的方法,默认它们会将日志信息打印到终端界面:

package main
import (
    "log"

)
func main(){
    log.Println("这是一条很普通的日志")
    v:="很普通的"
    log.Printf("这是一条%s的日志。\n",v)
    log.Fatalln("这是一条会触发fatal的日志。")
    log.Panicln("这是一条会触发panic的日志")
}

编译并执行上面的代码会得到下面的输出:

2019/06/05 00:17:03 这是一条很普通的日志
2019/06/05 00:17:03 这是一条很普通的的日志。
2019/06/05 00:17:03 这是一条会触发fatal的日志。
exit status 1

logger会打印每条日志信息的日期、时间,默认输出到系统的标准错误。Fatal系列函数会在写日志信息后调用os.Exit(1)。Panic系列函数会在写入日志信息后panic.

配置logger

标准logger的配置

默认情况下的logger只会提供日志的时间信息,但是很多情况下我们希望得到更多的信息,比如记录该日志的文件名和行号等。log标准库中为我们提供了定制这些设置的方法。
log标准库中的Flags函数会返回标准的logger的输出配置,而SetFlags函数用来设置标准的logger的输出配置。

func Flags() int
func SetFlags(flag int)

flag选项

log标准库提供了如下的flag选项,它们是一系列定义好的常量。

原文地址:https://blog.51cto.com/13766835/2405627

时间: 2024-08-10 23:13:39

go语言碎片整理之标准库log的相关文章

Golang中使用log(二):Golang 标准库log的实现

前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现. 其源码可以参考官方地址 1.Logger结构 首先来看下类型Logger的定义: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each

go标准库-log包源码学习

log包是go语言提供的一个简单的日志记录功能,其中定义了一个结构体类型 Logger,是整个包的基础部分,包中的其他方法都是围绕这整个结构体创建的. Logger结构 Logger结构的定义如下: type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte } mu 是sync.Mutex,它是一个同步互斥锁,用于保证日志记录的原子性. prefix 是输入的日志每一行的前缀 flag 是

go语言碎片整理之 time

时间和日期是我们编程中经常用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 单行导入 import "time" import "fmt" 多行导入 import ( "fmt" "time" ) time包 time.Time类型表示时间. func main(){ now := time.Now() fmt.Printf("current time is :%v\n",now

go语言碎片整理之接口

接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口类型 在Go语言中接口(interface)是一种类型,是一种抽象的类型.interface是一组method的集合,是duck-type programming的一种体现.接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机.不关心属性(数据),只关心行为(方法).为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型. 为什么

go语言碎片整理之包

在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的,本文介绍了go语言中如何定义包,如何导出包的内容以及如何导入其他包. 包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,go语言为我们提供了很多的内置包,如fmt.os.io等. 定义包 我们还可以根据自己的需要创建自己的包,一个包可以简单理解为一个存放.go文件的文件夹.该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属包. package 包名 注意事项:1

思考题3:介绍一种C/CPP的语言的语法、标准库

摘自:#if.if.#ifdef.#if defined之间的区别 下面是这篇文章的部分内容: 1.条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分, 条件编译里面有判断语句,比如 #if .#else .#elif 及 #endif 它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译 而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来决定执行那个语句,它里面的每个分支都编译了的 如果你的条件在程序编译前就已经确定了

Go语言 碎片整理之 文件操作

文件是什么?计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个error.对得到的文件实例调用close()方法能够关闭文件. func main(){ file,err := os.Open("./main.go") if err != nil{ fmt.Println("open file failed!,err",err) return }

go语言碎片整理之strconv

strconv包 strconv包实现额基本数据类型与其字符串表示的转换,主要有以下常用函数,Atoi().Itia().parse系列.format系列.append系列. string与int类型转换 这一组函数是我们平时用的最多的. Atoi() Atio()函数用于将字符串类型的整数转换为int类型,函数签名如下: func Atoi(s string) (i int, err error) 如果传入的字符串参数无法转换为int类型,就会报错. package main import (

如何创建标准库

STM32寄存器相对来说是比较多的.要想一个寄存器一个寄存器查阅,那真是需要一个漫长的时间.官方基于这一点,就开发了标准库.标准库是对寄存器方式的简化说明.其实来讲标准库就是把对寄存器的操作封装起来.对于学习芯片来说,用标准库来编程还是比较灵活的,便于查看与移植. 当然了,想看懂标准库还是需要对C语言有一个认识的,我们这里不讲解C语言,先对标准库工程做一个创建吧. 标准库的创建可不是我们,随缘添加的.官方可是费了很大的心思的,已经给了我们模板例程了. 请在官方网站下载对应芯片的固件库.我们这里以