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: message
func 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() int
Flags()
返回标准Logger
的输出标志。
func Output(calldepth int, s string) error
Output()
将记录事件的输出写出来。
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() string
Prefix()
返回标准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) *Logger
New()
创建了一个新的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() int
Flags返回Logger的输出标志。
func (l *Logger) Output(calldepth int, s string) error
Output写入记录事件的输出。
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 world
func (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() string
Prefix()
返回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.Writer
Writer()
返回Logger的输出目的地。