mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-10 00:22:27 +08:00
212 lines
5.1 KiB
Go
212 lines
5.1 KiB
Go
package xlog
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"runtime"
|
|
|
|
"qiniupkg.com/x/log.v7"
|
|
"qiniupkg.com/x/reqid.v7"
|
|
|
|
. "golang.org/x/net/context"
|
|
)
|
|
|
|
const (
|
|
Ldate = log.Ldate
|
|
Ltime = log.Ltime
|
|
Lmicroseconds = log.Lmicroseconds
|
|
Llongfile = log.Llongfile
|
|
Lshortfile = log.Lshortfile
|
|
Lmodule = log.Lmodule
|
|
Llevel = log.Llevel
|
|
LstdFlags = log.LstdFlags
|
|
Ldefault = log.Ldefault
|
|
)
|
|
|
|
const (
|
|
Ldebug = log.Ldebug
|
|
Linfo = log.Linfo
|
|
Lwarn = log.Lwarn
|
|
Lerror = log.Lerror
|
|
Lpanic = log.Lpanic
|
|
Lfatal = log.Lfatal
|
|
)
|
|
|
|
// ============================================================================
|
|
// type *Logger
|
|
|
|
type Logger struct {
|
|
ReqId string
|
|
}
|
|
|
|
func New(reqId string) *Logger {
|
|
|
|
return &Logger{reqId}
|
|
}
|
|
|
|
func NewWith(ctx Context) *Logger {
|
|
|
|
reqId, ok := reqid.FromContext(ctx)
|
|
if !ok {
|
|
log.Debug("xlog.New: reqid isn't find in context")
|
|
}
|
|
return &Logger{reqId}
|
|
}
|
|
|
|
func (xlog *Logger) Spawn(child string) *Logger {
|
|
|
|
return &Logger{xlog.ReqId + "." + child}
|
|
}
|
|
|
|
// ============================================================================
|
|
|
|
// Print calls Output to print to the standard Logger.
|
|
// Arguments are handled in the manner of fmt.Print.
|
|
func (xlog *Logger) Print(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprint(v...))
|
|
}
|
|
|
|
// Printf calls Output to print to the standard Logger.
|
|
// Arguments are handled in the manner of fmt.Printf.
|
|
func (xlog *Logger) Printf(format string, v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
// Println calls Output to print to the standard Logger.
|
|
// Arguments are handled in the manner of fmt.Println.
|
|
func (xlog *Logger) Println(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
func (xlog *Logger) Debugf(format string, v ...interface{}) {
|
|
if log.Ldebug < log.Std.Level {
|
|
return
|
|
}
|
|
log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func (xlog *Logger) Debug(v ...interface{}) {
|
|
if log.Ldebug < log.Std.Level {
|
|
return
|
|
}
|
|
log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
func (xlog *Logger) Infof(format string, v ...interface{}) {
|
|
if log.Linfo < log.Std.Level {
|
|
return
|
|
}
|
|
log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func (xlog *Logger) Info(v ...interface{}) {
|
|
if log.Linfo < log.Std.Level {
|
|
return
|
|
}
|
|
log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
func (xlog *Logger) Warnf(format string, v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func (xlog *Logger) Warn(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
func (xlog *Logger) Errorf(format string, v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func (xlog *Logger) Error(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
// Fatal is equivalent to Print() followed by a call to os.Exit(1).
|
|
func (xlog *Logger) Fatal(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprint(v...))
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Fatalf is equivalent to Printf() followed by a call to os.Exit(1).
|
|
func (xlog *Logger) Fatalf(format string, v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintf(format, v...))
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Fatalln is equivalent to Println() followed by a call to os.Exit(1).
|
|
func (xlog *Logger) Fatalln(v ...interface{}) {
|
|
log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintln(v...))
|
|
os.Exit(1)
|
|
}
|
|
|
|
// -----------------------------------------
|
|
|
|
// Panic is equivalent to Print() followed by a call to panic().
|
|
func (xlog *Logger) Panic(v ...interface{}) {
|
|
s := fmt.Sprint(v...)
|
|
log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
|
|
panic(s)
|
|
}
|
|
|
|
// Panicf is equivalent to Printf() followed by a call to panic().
|
|
func (xlog *Logger) Panicf(format string, v ...interface{}) {
|
|
s := fmt.Sprintf(format, v...)
|
|
log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
|
|
panic(s)
|
|
}
|
|
|
|
// Panicln is equivalent to Println() followed by a call to panic().
|
|
func (xlog *Logger) Panicln(v ...interface{}) {
|
|
s := fmt.Sprintln(v...)
|
|
log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
|
|
panic(s)
|
|
}
|
|
|
|
func (xlog *Logger) Stack(v ...interface{}) {
|
|
s := fmt.Sprint(v...)
|
|
s += "\n"
|
|
buf := make([]byte, 1024*1024)
|
|
n := runtime.Stack(buf, true)
|
|
s += string(buf[:n])
|
|
s += "\n"
|
|
log.Std.Output(xlog.ReqId, log.Lerror, 2, s)
|
|
}
|
|
|
|
func (xlog *Logger) SingleStack(v ...interface{}) {
|
|
s := fmt.Sprint(v...)
|
|
s += "\n"
|
|
buf := make([]byte, 1024*1024)
|
|
n := runtime.Stack(buf, false)
|
|
s += string(buf[:n])
|
|
s += "\n"
|
|
log.Std.Output(xlog.ReqId, log.Lerror, 2, s)
|
|
}
|
|
|
|
// ============================================================================
|
|
|
|
func SetOutput(w io.Writer) {
|
|
log.SetOutput(w)
|
|
}
|
|
|
|
func SetFlags(flag int) {
|
|
log.SetFlags(flag)
|
|
}
|
|
|
|
func SetOutputLevel(lvl int) {
|
|
log.SetOutputLevel(lvl)
|
|
}
|
|
|
|
// ============================================================================
|