Go語言的log
Logger struct
type Logger struct {
mu sync.Mutex
prefix string
flag int
out io.Writer
buf []byte
}
用于記錄日志,sync.Mutex 鎖mu, prefix 每條日志的字首,flag 有Ldata Ltime Lmicroseconds Llongfile Lshortfile LUTC LstdfFlags(Ldate | Ltime), out 輸出端, buf 日志緩存端
New
func New(out io.Writer, prefix string, flag int) *Logger
生成Logger對象
Logger::SetOutput
func (l *Logger)SetOutput(w io.Writer)
設定輸出端
itoa
func itoa(buf *[]byte, i int, wid int)
将i轉換為ASCII 寬度限制為wid
Logger::formatHeader
func (l *Logger)formatHeader(buf *[]byte, t time.Time, file string, line int)
格式化輸出 Ldate+’ ‘+Ltime+’ ‘+Llongfile/Lshortfile+’:’+line
Logger::Output
func (l *Logger) Output(calldepth int, s string) error
輸出:格式化+’\n’+out.Write(l.buf), calldepth: file路徑深度
Logger::Printf
func (l *Logger) Printf(format string, v ...interface{})
Printf 調用Logger::Output并且path=2
Logger::Print
func (l *Logger) Print(v interface{})
Print無格式直接輸出
Logger::Println
func (l *Logger) Println(v ...interface{})
Println->fmt.Sprintln()->fmt.Println()->l.Output
Logger::Fatal
func (l *Logger) Fatal(v ...interface{})
l.Fatal->fmt.Sprint->l.Output->os.Exit(1)
Logger::Fatalf
func (l *Logger) Fatalf(format string, v ...interface{})
l.Fatalf->fmt.Sprintf->l.Output->os.Exit(1)
Logger::Fatalln
func (l *Logger) Fatalln(v ...interface{})
l.Fatalln->fmt.Sprintln->l.Output->os.Exit(1)
Logger::Panic
func (l *Logger) Panic(v ...interface{})
l.Panic->fmt.Sprint->l.Output->panic(s)
Logger::Panicf
func (l *Logger) Panicf(format string, v ...interface{})
l.Panicf->fmt.Sprintf->l.Output->panic(s)
Logger::Panicln
func (l *Logger) Panicln(v ...interface{})
l.Panicln->fmt.Sprintln->l.Output(2, s)->panic(s)
Flags
func (l *Logger) Flags() int
擷取flag
SetFlags
func (l *logger) SetFlags(flag int)
設定Flag
Prefix
func (l *Logger) Prefix() string
擷取prefix string
SetPrefix
func (l *Logger) SetPrefix(prefix string)
設定prefix string
std
New std
var std = New(os.Stderr, "", LstdFlags)
标準錯誤輸出
std functions
func Flag()int
func SetFlag(flag int)
調用std.Flag std.SetFlag
func Prefix()string
func SetPrefix(prefix string)
調用std.Prefix std.SetPrefix
func Print(v ...interface{})
func Printf(format string, v ...interface{})
func Println(v ...interface{})
調用std.Print std.Printf…
func Fatal(v ...interface{})
func Fatalf(format string, v ...interface{})
func Fatalln(v ...interface{})
調用std.Fatal std.Fatalf…
func Panic(v ...interface{})
func Panicf(format string, v ...interface{})
func Panicln(v ...interface{})
調用std.Panic std.Panicf std.Panicln..
func Output(calldepth int, s string) error
調用std.Output
// Calldepth is the count of the number of
// frames to skip when computing the file name and line number
// if Llongfile or Lshortfile is set;