packages log

import "log"

log包实现了一个简单的日志包,它定义了一种类型Logger,其中包含格式化输出的方法。

它还有一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln]Fatal[f|ln]Panic[f|ln]访问,使用这些辅助函数比手动创建Logger更容易使用。Logger写入标准错误输出并打印每个日志记录的时间和日期。

每条日志记录都在单独的行中输出:如果正在打印的消息未以换行符结尾,则Logger将会在行尾添加一个换行符。

  • Fatal函数在写入日志消息后调用os.Exit(1)
  • Panic函数在写入日志消息后调用运行时恐慌(panic)。

常量

const (
    Ldate         = 1 << iota     // 当地时区的日期: 2009/01/23
    Ltime                         // 当地时区的时间: 01:23:23
    Lmicroseconds                 // 微秒精度: 01:23:23.123123.  假设是Ltime
    Llongfile                     // 完整的文件名和行号: /a/b/c/d.go:23
    Lshortfile                    // 最终文件名元素和行号: d.go:23. 覆盖Llongfile
    LUTC                          // 如果设置了Ldate或者Ltime,那么使用UTC而不是本地时区
    LstdFlags     = Ldate | Ltime // 标准Logger的初始值
)

这些标志定义了Logger生成的每个日志条目的前缀,(|) 或运算来控制哪些需要输出。无法控制它们出现的顺序(如,此处列出的顺序)或它们呈现的格式(如,注释中所述)。仅当指定LlongfileLshortfile时,前缀后跟冒号。查看如下示例:

// 设置Ldate | Ltime(或LstdFlags)则产生如下效果
2009/01/23 01:23:23 message

// 设置Ldate | Ltime | Lmicroseconds | Llongfile 则产生如下效果
2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message

函数Fatal

func Fatal(v ...interface{})

Fatal()等效于Print(),然后调用os.Exit(1)

函数Fatalf

func Fatalf(format string, v ...interface{})

Fatal()等效于Printf(),然后调用os.Exit(1)

函数Fatalln

func Fatalln(v ...interface{})

Fatal()等效于Println(),然后调用os.Exit(1)

函数Flags

func Flags() int

Flags()返回标准Logger的输出标志。

函数Output

func Output(calldepth int, s string) error

Output()将记录事件的输出写出来。

  • 字符串s包含要在Loggerflags中指定的前缀之后打印的文本内容。如果s的最后一个字符不是换行符,则会附加换行符。
  • Calldepth是设置了LlongfileLshortfile后,计算文件名和行号时要跳过的帧数; 如果Calldepth的值为1将打印Output()调用者的详细信息。

函数Panic

func Panic(v ...interface{})

Panic()等效于Print(),然后调用panic()

函数Panicf

func Panicf(format string, v ...interface{})

Panic()等效于Printf(),然后调用panic()

函数Panicln

func Panicln(v ...interface{})

Panic()等效于Println(),然后调用panic()

函数Prefix

func Prefix() string

Prefix()返回标准Logger的输出前缀。

函数Print

func Print(v ...interface{})

Print()调用Output()来打印到标准Logger,参数以fmt.Print()的方式处理。

函数Printf

func Printf(format string, v ...interface{})

Print()调用Output()来打印到标准Logger,参数以fmt.Printf()的方式处理。

函数Println

func Println(v ...interface{})

Print()调用Output()来打印到标准Logger,参数以fmt.Println()的方式处理。

总结几个方法

image

函数SetFlags

func SetFlags(flag int)

SetFlags()为标准Logger设置输出标识。

函数SetOutput

func SetOutput(w io.Writer)

SetOutput()设置标准longer的输出目的地。

函数SetPrefix

func SetPrefix(prefix string)

SetPrefix()设置标准Logger的输出前缀。

函数New

func New(out io.Writer, prefix string, flag int) *Logger

New()创建了一个新的Logger

  • out设置日志数据的目的地
  • prefix每行日志记录的前缀
  • flag定义日志记录操作的属性

类型Logger

type Logger struct {
    // contains filtered or unexported fields
}

Logger表示一个活跃的日志记录对象,它向io.Writer生成输出。每个日志记录操作只对WriterWrite()方法进行一次调用。Logger可以同时被多个goroutine使用; 它保证对Writer的序列化访问。

例子

var (
    buf    bytes.Buffer
    logger = log.New(&buf, "logger: ", log.Lshortfile)
)

logger.Print("Hello, log file!")

fmt.Print(&buf)

// 输出
logger: example_test.go:19: Hello, log file!

方法 (*Logger)Fatal

func (l *Logger) Fatal(v ...interface{})

Fatal()等效于l.Print(),然后调用os.Exit(1)

方法 (*Logger)Fatalf

func (l *Logger) Fatalf(format string, v ...interface{})

Fatalf()等效于l.Printf(),然后调用os.Exit(1)

方法 (*Logger)Fatalln

func (l *Logger) Fatalln(v ...interface{})

Fatalln()等效于l.Println(),然后调用os.Exit(1)

方法 (*Logger)Flags

func (l *Logger) Flags() int

Flags返回Logger的输出标志。

方法 (*Logger)Output

func (l *Logger) Output(calldepth int, s string) error

Output写入记录事件的输出。

  • 字符串s包含要在Loggerflags指定的前缀之后打印的文本。如果s的最后一个字符不是换行符,则会附加换行符
  • Calldepth提供通用的用于恢复PC(程序计数器),当前所有预定义路径上它都是2

样例

var (
    buf    bytes.Buffer
    logger = log.New(&buf, "INFO: ", log.Lshortfile)

    infof = func(info string) {
        logger.Output(2, info)
    }
)

infof("Hello world")

fmt.Print(&buf)

// 输出
INFO: example_test.go:36: Hello world

方法(*Logger) Panic

func (l *Logger) Panic(v ...interface{})

Panic()等效于l.Print(),然后调用panic()

方法(*Logger) Panicf

func (l *Logger) Panicf(format string, v ...interface{})

Panicf()等效于l.Printf(),然后调用panic()

方法(*Logger) Panicln

func (l *Logger) Panicln(v ...interface{})

Panicln()等效于l.Println(),然后调用panic()

方法(*Logger) Prefix

func (l *Logger) Prefix() string

Prefix()返回Logger的输出前缀。

方法(*Logger) Print

func (l *Logger) Print(v ...interface{})

Print()调用l.Output()来输出到Logger。参数以fmt.Println()的方式处理。

方法(*Logger) Printf

func (l *Logger) Printf(format string, v ...interface{})

Printf()调用l.Output()来输出到Logger。参数以fmt.Printf()的方式处理。

方法(*Logger) Println

func (l *Logger) Println(v ...interface{})

Println()调用l.Output()来输出到Logger。参数以fmt.Println()方式处理。

方法(*Logger) SetFlags

func (l *Logger) SetFlags(flag int)

SetFlags()设置Logger的输出flags

方法(*Logger) SetOutput

func (l *Logger) SetOutput(w io.Writer)

SetOutput()设置Logger的输出目的地。

方法(*Logger) SetPrefix

func (l *Logger) SetPrefix(prefix string)

SetPrefix()设置Logger的输出前缀。

方法(*Logger) Writer

func (l *Logger) Writer() io.Writer

Writer()返回Logger的输出目的地。

上次修改: 14 April 2020