import "log"log包实现了一个简单的日志包,它定义了一种类型Logger,其中包含格式化输出的方法。
它还有一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln],Fatal[f|ln]和Panic[f|ln]访问,使用这些辅助函数比手动创建Logger更容易使用。Logger写入标准错误输出并打印每个日志记录的时间和日期。
每条日志记录都在单独的行中输出:如果正在打印的消息未以换行符结尾,则Logger将会在行尾添加一个换行符。
os.Exit(1)。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生成的每个日志条目的前缀,(|) 或运算来控制哪些需要输出。无法控制它们出现的顺序(如,此处列出的顺序)或它们呈现的格式(如,注释中所述)。仅当指定Llongfile或Lshortfile时,前缀后跟冒号。查看如下示例:
// 设置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: messagefunc Fatal(v ...interface{})Fatal()等效于Print(),然后调用os.Exit(1)。
func Fatalf(format string, v ...interface{})Fatal()等效于Printf(),然后调用os.Exit(1)。
func Fatalln(v ...interface{})Fatal()等效于Println(),然后调用os.Exit(1)。
func Flags() intFlags()返回标准Logger的输出标志。
func Output(calldepth int, s string) errorOutput()将记录事件的输出写出来。
s包含要在Logger的flags中指定的前缀之后打印的文本内容。如果s的最后一个字符不是换行符,则会附加换行符。Calldepth是设置了Llongfile或Lshortfile后,计算文件名和行号时要跳过的帧数; 如果Calldepth的值为1将打印Output()调用者的详细信息。func Panic(v ...interface{})Panic()等效于Print(),然后调用panic()。
func Panicf(format string, v ...interface{})Panic()等效于Printf(),然后调用panic()。
func Panicln(v ...interface{})Panic()等效于Println(),然后调用panic()。
func Prefix() stringPrefix()返回标准Logger的输出前缀。
func Print(v ...interface{})Print()调用Output()来打印到标准Logger,参数以fmt.Print()的方式处理。
func Printf(format string, v ...interface{})Print()调用Output()来打印到标准Logger,参数以fmt.Printf()的方式处理。
func Println(v ...interface{})Print()调用Output()来打印到标准Logger,参数以fmt.Println()的方式处理。

func SetFlags(flag int)SetFlags()为标准Logger设置输出标识。
func SetOutput(w io.Writer)SetOutput()设置标准longer的输出目的地。
func SetPrefix(prefix string)SetPrefix()设置标准Logger的输出前缀。
func New(out io.Writer, prefix string, flag int) *LoggerNew()创建了一个新的Logger。
out设置日志数据的目的地prefix每行日志记录的前缀flag定义日志记录操作的属性type Logger struct {
// contains filtered or unexported fields
}Logger表示一个活跃的日志记录对象,它向io.Writer生成输出。每个日志记录操作只对Writer的Write()方法进行一次调用。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!func (l *Logger) Fatal(v ...interface{})Fatal()等效于l.Print(),然后调用os.Exit(1)。
func (l *Logger) Fatalf(format string, v ...interface{})Fatalf()等效于l.Printf(),然后调用os.Exit(1)。
func (l *Logger) Fatalln(v ...interface{})Fatalln()等效于l.Println(),然后调用os.Exit(1)。
func (l *Logger) Flags() intFlags返回Logger的输出标志。
func (l *Logger) Output(calldepth int, s string) errorOutput写入记录事件的输出。
s包含要在Logger中flags指定的前缀之后打印的文本。如果s的最后一个字符不是换行符,则会附加换行符Calldepth提供通用的用于恢复PC(程序计数器),当前所有预定义路径上它都是2var (
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 worldfunc (l *Logger) Panic(v ...interface{})Panic()等效于l.Print(),然后调用panic()。
func (l *Logger) Panicf(format string, v ...interface{})Panicf()等效于l.Printf(),然后调用panic()。
func (l *Logger) Panicln(v ...interface{})Panicln()等效于l.Println(),然后调用panic()。
func (l *Logger) Prefix() stringPrefix()返回Logger的输出前缀。
func (l *Logger) Print(v ...interface{})Print()调用l.Output()来输出到Logger。参数以fmt.Println()的方式处理。
func (l *Logger) Printf(format string, v ...interface{})Printf()调用l.Output()来输出到Logger。参数以fmt.Printf()的方式处理。
func (l *Logger) Println(v ...interface{})Println()调用l.Output()来输出到Logger。参数以fmt.Println()方式处理。
func (l *Logger) SetFlags(flag int)SetFlags()设置Logger的输出flags。
func (l *Logger) SetOutput(w io.Writer)SetOutput()设置Logger的输出目的地。
func (l *Logger) SetPrefix(prefix string)SetPrefix()设置Logger的输出前缀。
func (l *Logger) Writer() io.WriterWriter()返回Logger的输出目的地。