golang中創建logger時候踩過的坑
- 錯誤的代碼
package main
import (
"fmt"
"io"
"log"
"os"
)
var logger *log.Logger
func init(){
fmt.Println("創建日記錄日志文件")
f,err:=os.OpenFile("./Log.log",os.O_WRONLY|os.O_CREATE|os.O_APPEND,0644)
if err!=nil{
log.Fatal("os.OpenFile err",err)
}
defer f.Close()
writers := []io.Writer{
f,
os.Stdout}
//實例化Writer接口
fileAndStdoutWriter := io.MultiWriter(writers...)
//MultiWriter創建一個Writer接口,會將提供給其的數據寫入所有創建時提供的Writer接口
logger = log.New(fileAndStdoutWriter, "", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("---> logger:check to make sure is works")
}
func main(){
logger.Println("注意,這里是不會打印和寫入文件的")
}
-
出現的錯誤
- 在main函數里面logger.Println()不能打印到控制台,也不能寫入文件
-
錯誤原因
defer f.Close() //在init函數執行完畢時,關閉文件f,使文件不能用於讀寫