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  }