log包

1. 主要的包内结构体定义

标准包定义的结构体信息

type Logger struct {
    // 原子锁
    mu     sync.Mutex // ensures atomic writes; protects the following fields
    prefix string     // prefix to write at beginning of each line
    flag   int        // properties
    out    io.Writer  // destination for output
    buf    []byte     // for accumulating text to write
}

当前结构体包含了几个信息

  • mu: 包内置的锁,针对一些常见设置操作,保证原子性。
  • prefix:字段前缀,用于在写入日志前,加一个字段前缀信息。
  • flag: 包内置了一些常用的时间输出格式,flag用来标识时间格式展示的类型.
  • out: 输出设备信息。
  • buf: 用于写入文件的日志内容信息。

2. 包内初始化的方法

包内初始化方法

func New(out io.Writer, prefix string, flag int) *Logger {
    return &Logger{out: out, prefix: prefix, flag: flag}
}

3. 包内置了一个开箱即用的标准log结构

初始化方法

var std = New(os.Stderr, "", LstdFlags)

说明: LstdFlags为标准包内置定义的一种日志输出前缀格式,即时间 2006-01-02 15:04:05

常见的错误信息记录demo

func Print(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
}

包内锁的使用

func SetOutput(w io.Writer) {
    std.mu.Lock()
    defer std.mu.Unlock()
    std.out = w
}

4. log包使用

main包调用

package main

import "log"

func main() {
    log.Println("message")
}

输出展示

E:\goproject\study>go run main.go
2020/11/06 20:34:34 message