github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/07_log/custom/main.go (about) 1 package main 2 3 import ( 4 "io" 5 "io/ioutil" 6 "log" 7 "os" 8 ) 9 10 var ( 11 Trace *log.Logger // Just about anything 12 Info *log.Logger // Important information 13 Warning *log.Logger // Be concerned 14 Error *log.Logger // Critical problem 15 ) 16 17 func pathExists(path string) (bool, error) { 18 _, err := os.Stat(path) 19 if err == nil { 20 return true, nil 21 } 22 if os.IsNotExist(err) { 23 return false, nil 24 } 25 return false, err 26 } 27 28 func init() { 29 dir := "logs" 30 if exist, _ := pathExists(dir); !exist { 31 // 创建文件夹 32 os.Mkdir(dir, os.ModePerm) 33 } 34 file, err := os.OpenFile(dir+"/errors.txt", 35 os.O_CREATE|os.O_WRONLY, 0666) 36 if err != nil { 37 log.Fatalln("Failed to open error log file:", err) 38 } 39 40 Trace = log.New(ioutil.Discard, 41 "TRACE: ", 42 log.Ldate|log.Ltime|log.Lshortfile) 43 44 Info = log.New(os.Stdout, 45 "INFO: ", 46 log.Ldate|log.Ltime|log.Lshortfile) 47 48 Warning = log.New(os.Stdout, 49 "WARNING: ", 50 log.Ldate|log.Ltime|log.Lshortfile) 51 52 Error = log.New(io.MultiWriter(file, os.Stderr), // 合并流 输出到os.std 中 还输出到文件中 53 "ERROR: ", 54 log.Ldate|log.Ltime|log.Llongfile) 55 } 56 57 func main() { 58 Trace.Println("I have something standard to say") 59 Info.Println("Special Information") 60 Warning.Println("There is something you need to know about") 61 Error.Println("Something has failed") 62 63 }