在go语言中,内置了日志工具包来方便开发者记录日志信息。go语言中,关于日志的操做都在log包中。工具
package main
import (
"log"
)
func init(){
//设置日志前缀
log.SetPrefix("日志:")
//设置标志,这里设置了让日志信息中添加日期,时间,文件的短路径名称信息
log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}
func main(){
log.Println("这是日志信息。。");
}
//日志:2017/10/02 13:41:38 main.go:13: 这是日志信息。。
复制代码
再来看下面的代码:ui
package main
import (
"log"
)
func init(){
log.SetPrefix("日志:")
log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}
func main(){
log.Println("这是正常的日志信息。。")
log.Fatalln("致命的错误日志信息。。")
log.Panicln("警告的日志信息。。")
}
//日志:2017/10/02 13:44:49 main.go:13: 这是正常的日志信息。。
//日志:2017/10/02 13:44:49 main.go:14: 致命的错误日志信息。。
//exit status 1
复制代码
从上面的执行结果能够看出,在调用了Fatalln方法以后,程序会退出执行。因此下面一行的代码也就没法执行了。spa
package main
import (
"io"
"log"
"os"
)
func init(){
log.SetPrefix("日志:")
log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}
func main(){
file ,_ := os.OpenFile("errors.txt",os.O_WRONLY,0666)
log.SetOutput(io.Writer(file))
log.Println("这个日志将会输出到文件中")
}
复制代码
上面的代码设置了log的输出,将日志输出到文件errors中了。代码在执行后就会在文件errors.txt中添加日志信息。 其中os.OpenFile方法用来打开一个文件,更多说明请点日志
在其余语言中,咱们记录日志的时候通常会用到info,warn,error等方法来输出各类不一样级别的日志信息。在go中,咱们也能够实现这样的日志记录器。code
package main
import (
"io"
"log"
"os"
)
//声明3个变量,用来记录不一样的日志信息
var Info *log.Logger
var Warn *log.Logger
var Error *log.Logger
//初始化
func init(){
Info = log.New(os.Stdout,"Info:",log.Ldate | log.Ltime | log.Lshortfile)
Warn = log.New(os.Stdout,"Warn:",log.Ldate | log.Ltime | log.Lshortfile)
file , err := os.OpenFile("errors.txt",os.O_APPEND |os.O_WRONLY,0666)
//若是打开错误日志文件失败
if err != nil{
log.Fatalln("打开日志文件失败。。")
}
//初始化错误日志记录器Error
Error = log.New(io.MultiWriter(os.Stderr,file),"Error:",log.Ldate | log.Ltime | log.Lshortfile)
}
func main(){
Info.Println("info日志")
Warn.Println("warn日志")
Error.Println("error日志")
}
//Info:2017/10/02 14:32:56 main.go:29: info日志
//Warn:2017/10/02 14:32:56 main.go:30: warn日志
//Error:2017/10/02 14:32:56 main.go:31: error日志
复制代码
上面的代码运行以后,会在控制台输出上面的内容,同时会在errors.txt文件中,加入“Error:2017/10/02 14:32:56 main.go:31: error日志” 信息。io.MultiWriter方法用来建立一个Writer对象,这个对象会将写入提供给参数中定义的每个writer,用来将日志信息同时写入到多个输出中。 关于这个方法的更多说明,请点cdn