内容目录
使用
Go 中常用的 log 方法:
Print/Printf/Println : 打印日志信息
Panic/Panicf/Panicln : 打印日志信息后,以拼装好的字符串为参数调用 Panic
Fatal/Fatalf/Fatalln : 打印日志信息后,os.Exit(1) 退出程序
New 一个 Logger 的定义如下:
func New(out io.Writer, prefix string, flag int) *Logger {
return &Logger{out: out, prefix: prefix, flag: flag}
}
type Logger struct {
mu sync.Mutex // ensures atomic writes; protects the following fields
prefix string // prefix on each line to identify the logger (but see Lmsgprefix)
flag int // properties
out io.Writer // destination for output
buf []byte // for accumulating text to write
}
例如,日志写入文件中:
package main
import (
"fmt"
"log"
"os"
"time"
)
func main() {
fn := fmt.Sprint("log-", time.Now().Unix(), ".log")
logFile, _ := os.Create(fn)
defer logFile.Close()
logger := log.New(logFile, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("test debug message")
logger.SetPrefix("[Info]")
logger.Println("test info message")
}
logger.SetPrefix("[Info]")
可以重新设置前缀;
log.Ldate|log.Ltime|log.Lshortfile
设置日志的 flags,示例中一共有三个枚举,可以让日志附加信息。
生成效果:2022/11/20 09:09:39 main.go:16
log.Ldate
生成 2022/11/20
;
log.Ltime
生成 09:09:39
;
log.Lshortfile
生成 main.go:16
,表示日志来源于源代码的具体位置。
只打印到控制台:
logger := log.New(os.Stdout, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
封装日志
参考 https://www.cnblogs.com/tigerzhouv587/p/11498630.html
package main
import (
"io"
"io/ioutil"
"log"
"os"
)
var (
Trace *log.Logger // 记录所有日志
Info *log.Logger // 重要的信息
Warning *log.Logger // 需要注意的信息
Error *log.Logger // 致命错误
)
func init() {
file, err := os.OpenFile("file", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalln("Failed to open error log file:", err)
}
Trace = log.New(ioutil.Discard, "TRACE: ", log.Ltime|log.Lshortfile)
Info = log.New(os.Stdout, "Info: ", log.Ltime|log.Lshortfile)
Warning = log.New(os.Stdout, "Warning: ", log.Ltime|log.Lshortfile)
Error = log.New(io.MultiWriter(file, os.Stderr), "Error", log.Ltime|log.Lshortfile)
}
func main() {
Trace.Println("I have something standard to say")
Info.Println("Special Information")
Warning.Println("There is something you need to know about")
Error.Println("Something has failed")
}
io.MultiWriter(file, os.Stderr)
,可以将一个 IO 流,同时写入到多个 IO 流中。
文章评论