github.com/qiniu/x@v1.11.9/xlog/xlog.go (about)

     1  package xlog
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"runtime"
     8  
     9  	"github.com/qiniu/x/log"
    10  	"github.com/qiniu/x/reqid"
    11  
    12  	. "context"
    13  )
    14  
    15  const (
    16  	Ldate         = log.Ldate
    17  	Ltime         = log.Ltime
    18  	Lmicroseconds = log.Lmicroseconds
    19  	Llongfile     = log.Llongfile
    20  	Lshortfile    = log.Lshortfile
    21  	Lmodule       = log.Lmodule
    22  	Llevel        = log.Llevel
    23  	LstdFlags     = log.LstdFlags
    24  	Ldefault      = log.Ldefault
    25  )
    26  
    27  const (
    28  	Ldebug = log.Ldebug
    29  	Linfo  = log.Linfo
    30  	Lwarn  = log.Lwarn
    31  	Lerror = log.Lerror
    32  	Lpanic = log.Lpanic
    33  	Lfatal = log.Lfatal
    34  )
    35  
    36  // ============================================================================
    37  // type *Logger
    38  
    39  type Logger struct {
    40  	ReqId string
    41  }
    42  
    43  func New(reqId string) *Logger {
    44  
    45  	return &Logger{reqId}
    46  }
    47  
    48  func NewWith(ctx Context) *Logger {
    49  
    50  	reqId, ok := reqid.FromContext(ctx)
    51  	if !ok {
    52  		log.Debug("xlog.New: reqid isn't find in context")
    53  	}
    54  	return &Logger{reqId}
    55  }
    56  
    57  func (xlog *Logger) Spawn(child string) *Logger {
    58  
    59  	return &Logger{xlog.ReqId + "." + child}
    60  }
    61  
    62  // ============================================================================
    63  
    64  // Print calls Output to print to the standard Logger.
    65  // Arguments are handled in the manner of fmt.Print.
    66  func (xlog *Logger) Print(v ...interface{}) {
    67  	log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprint(v...))
    68  }
    69  
    70  // Printf calls Output to print to the standard Logger.
    71  // Arguments are handled in the manner of fmt.Printf.
    72  func (xlog *Logger) Printf(format string, v ...interface{}) {
    73  	log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...))
    74  }
    75  
    76  // Println calls Output to print to the standard Logger.
    77  // Arguments are handled in the manner of fmt.Println.
    78  func (xlog *Logger) Println(v ...interface{}) {
    79  	log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...))
    80  }
    81  
    82  // -----------------------------------------
    83  
    84  func (xlog *Logger) Debugf(format string, v ...interface{}) {
    85  	if log.Ldebug < log.Std.Level {
    86  		return
    87  	}
    88  	log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintf(format, v...))
    89  }
    90  
    91  func (xlog *Logger) Debug(v ...interface{}) {
    92  	if log.Ldebug < log.Std.Level {
    93  		return
    94  	}
    95  	log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintln(v...))
    96  }
    97  
    98  // -----------------------------------------
    99  
   100  func (xlog *Logger) Infof(format string, v ...interface{}) {
   101  	if log.Linfo < log.Std.Level {
   102  		return
   103  	}
   104  	log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...))
   105  }
   106  
   107  func (xlog *Logger) Info(v ...interface{}) {
   108  	if log.Linfo < log.Std.Level {
   109  		return
   110  	}
   111  	log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...))
   112  }
   113  
   114  // -----------------------------------------
   115  
   116  func (xlog *Logger) Warnf(format string, v ...interface{}) {
   117  	log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintf(format, v...))
   118  }
   119  
   120  func (xlog *Logger) Warn(v ...interface{}) {
   121  	log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintln(v...))
   122  }
   123  
   124  // -----------------------------------------
   125  
   126  func (xlog *Logger) Errorf(format string, v ...interface{}) {
   127  	log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintf(format, v...))
   128  }
   129  
   130  func (xlog *Logger) Error(v ...interface{}) {
   131  	log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintln(v...))
   132  }
   133  
   134  // -----------------------------------------
   135  
   136  // Fatal is equivalent to Print() followed by a call to os.Exit(1).
   137  func (xlog *Logger) Fatal(v ...interface{}) {
   138  	log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprint(v...))
   139  	os.Exit(1)
   140  }
   141  
   142  // Fatalf is equivalent to Printf() followed by a call to os.Exit(1).
   143  func (xlog *Logger) Fatalf(format string, v ...interface{}) {
   144  	log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintf(format, v...))
   145  	os.Exit(1)
   146  }
   147  
   148  // Fatalln is equivalent to Println() followed by a call to os.Exit(1).
   149  func (xlog *Logger) Fatalln(v ...interface{}) {
   150  	log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintln(v...))
   151  	os.Exit(1)
   152  }
   153  
   154  // -----------------------------------------
   155  
   156  // Panic is equivalent to Print() followed by a call to panic().
   157  func (xlog *Logger) Panic(v ...interface{}) {
   158  	s := fmt.Sprint(v...)
   159  	log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
   160  	panic(s)
   161  }
   162  
   163  // Panicf is equivalent to Printf() followed by a call to panic().
   164  func (xlog *Logger) Panicf(format string, v ...interface{}) {
   165  	s := fmt.Sprintf(format, v...)
   166  	log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
   167  	panic(s)
   168  }
   169  
   170  // Panicln is equivalent to Println() followed by a call to panic().
   171  func (xlog *Logger) Panicln(v ...interface{}) {
   172  	s := fmt.Sprintln(v...)
   173  	log.Std.Output(xlog.ReqId, log.Lpanic, 2, s)
   174  	panic(s)
   175  }
   176  
   177  func (xlog *Logger) Stack(v ...interface{}) {
   178  	s := fmt.Sprint(v...)
   179  	s += "\n"
   180  	buf := make([]byte, 1024*1024)
   181  	n := runtime.Stack(buf, true)
   182  	s += string(buf[:n])
   183  	s += "\n"
   184  	log.Std.Output(xlog.ReqId, log.Lerror, 2, s)
   185  }
   186  
   187  func (xlog *Logger) SingleStack(v ...interface{}) {
   188  	s := fmt.Sprint(v...)
   189  	s += "\n"
   190  	buf := make([]byte, 1024*1024)
   191  	n := runtime.Stack(buf, false)
   192  	s += string(buf[:n])
   193  	s += "\n"
   194  	log.Std.Output(xlog.ReqId, log.Lerror, 2, s)
   195  }
   196  
   197  // ============================================================================
   198  
   199  func SetOutput(w io.Writer) {
   200  	log.SetOutput(w)
   201  }
   202  
   203  func SetFlags(flag int) {
   204  	log.SetFlags(flag)
   205  }
   206  
   207  func SetOutputLevel(lvl int) {
   208  	log.SetOutputLevel(lvl)
   209  }
   210  
   211  // ============================================================================