go中的log小型轻量而且多线程安全
关于log
log模块主要提供了3类接口:Print
:单纯打印日志Panic
:打印日志,并抛出painc异常(也就是说除了defer之外此日志后面的内容就不执行了)Fatal
: 打印日志,并强制退出程序(调用os.exit),包括defer都不执行
每一类接口其提供了3中调用方式:log.Print
:打印log.Printf
:打印并格式化log.Println
:打印并换行
初始化log
import (
"log"
)
func init() {
//设置前缀
log.SetPrefix("MYLOG: ")
//对log输出格式进行配置:日期|时间|文件路径
log.SetFlags(log.Ldate | log.Lmicroseconds | log.Lshortfile)
}
自定义log
log标准库中还提供了内置函数用于自定义logger,通过log.new将log的配置一次性配置,简化配置
var logger *log.Logger
func init(){
//输出到屏幕 前缀 日期 时间 文件名
logger = log.New(os.Stdout, "DEBUG:", log.Ldate | log.Lmicroseconds | log.Lshortfile)
}
func main() {
logger.Println("log")
}
将log输出到文件
var logger *log.Logger
func init(){
f,err:=os.OpenFile("log.txt",os.O_WRONLY|os.O_APPEND|os.O_CREATE,0664)
if err !=nil{
log.Fatal("日志文件打不开")
}
//输出到log.txt 前缀 日期 时间 文件名
logger = log.New(f, "DEBUG:", log.Ldate | log.Lmicroseconds | log.Lshortfile)
}
func main() {
logger.Println("log")
}
使用builtin直接调用相关函数打印
println("DEBUG:"," ","我是日志")
panic("panic日志")
使用log
log.Println("日志")
v := "内容"
log.Printf("日志:%s\n", v)
//fatal日志会调用os.Exit(1),直接关闭程序
log.Fatalln("fatal日志")
//Panic日志会在执行后会自动触发一个异常,但是defer可以执行
log.Panicln("panic日志。")