官方 Log 包

方法

  • 输出到 logger.out: log.Print(), log.Printf(), log.Println()
  • 输出到 logger.out, 再执行 os.Exit(1): log.Fatal(), log.Fatalln(), log.Fatalf()
  • 输出到 logger.out, 再执行 panic(): log.Panic(), log.Panicln(), log.Panicf()

logger 结构体

type Logger struct {
	mu     sync.Mutex // ensures atomic writes; protects the following fields
	prefix string     // 日志前缀
    flag   int        // 日志格式
    // 0 空
    // 1 年月日
    // 2 时分秒
    // 3 1+2 默认, 一般情况下用这个即可
    // 4 时分秒+毫秒
    // 5 年月日+时分秒+毫秒
	out    io.Writer  // 输出位置
	buf    []byte     // for accumulating text to write
}

使用示例

  • 打印到终端(默认)
package main

import "log"

func main() {
	log.Print("abc")
}
  • 打印到文件
package main

import (
	"log"
	"os"
)

func main() {

	// 打开一个文件作为日志文件
	logFile, _ := os.OpenFile("xx.log", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
	defer logFile.Close()
	
    log.SetOutput(logFile)
	// log.SetPrefix("[thc] ")  // 一般情况下不需要设置, 使用默认即可
	// log.SetFlags(3)          // 一般情况下不需要设置, 使用默认即可
    log.Print("xxx")


	// 单独生成一个 log.Logger, 效果同上
	logger := log.New(logFile, "[thc] ", 3)
    logger.Print("xxx")
}