gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/debug/log/log.go (about)

     1  // Package log provides debug logging
     2  package log
     3  
     4  import (
     5  	"fmt"
     6  	"os"
     7  	"time"
     8  )
     9  
    10  var (
    11  	// DefaultLog logger
    12  	DefaultLog = NewLog()
    13  	// DefaultLevel is default log level
    14  	DefaultLevel = LevelInfo
    15  	// prefix for all messages
    16  	prefix string
    17  )
    18  
    19  // Log is event log
    20  type Log interface {
    21  	// Read reads log entries from the logger
    22  	Read(...ReadOption) []Record
    23  	// Write writes records to log
    24  	Write(Record)
    25  	// Stream log records
    26  	Stream(chan bool) <-chan Record
    27  }
    28  
    29  // Record is log record entry
    30  type Record struct {
    31  	// Timestamp of logged event
    32  	Timestamp time.Time
    33  	// Value contains log entry
    34  	Value interface{}
    35  	// Metadata to enrich log record
    36  	Metadata map[string]string
    37  }
    38  
    39  // level is a log level
    40  type Level int
    41  
    42  const (
    43  	LevelFatal Level = iota
    44  	LevelError
    45  	LevelInfo
    46  	LevelWarn
    47  	LevelDebug
    48  	LevelTrace
    49  )
    50  
    51  func init() {
    52  	switch os.Getenv("MICRO_LOG_LEVEL") {
    53  	case "trace":
    54  		DefaultLevel = LevelTrace
    55  	case "debug":
    56  		DefaultLevel = LevelDebug
    57  	case "warn":
    58  		DefaultLevel = LevelWarn
    59  	case "info":
    60  		DefaultLevel = LevelInfo
    61  	case "error":
    62  		DefaultLevel = LevelError
    63  	case "fatal":
    64  		DefaultLevel = LevelFatal
    65  	}
    66  }
    67  
    68  func log(v ...interface{}) {
    69  	if len(prefix) > 0 {
    70  		DefaultLog.Write(Record{Value: fmt.Sprint(append([]interface{}{prefix, " "}, v...)...)})
    71  		return
    72  	}
    73  	DefaultLog.Write(Record{Value: fmt.Sprint(v...)})
    74  }
    75  
    76  func logf(format string, v ...interface{}) {
    77  	if len(prefix) > 0 {
    78  		format = prefix + " " + format
    79  	}
    80  	DefaultLog.Write(Record{Value: fmt.Sprintf(format, v...)})
    81  }
    82  
    83  // WithLevel logs with the level specified
    84  func WithLevel(l Level, v ...interface{}) {
    85  	if l > DefaultLevel {
    86  		return
    87  	}
    88  	log(v...)
    89  }
    90  
    91  // WithLevel logs with the level specified
    92  func WithLevelf(l Level, format string, v ...interface{}) {
    93  	if l > DefaultLevel {
    94  		return
    95  	}
    96  	logf(format, v...)
    97  }
    98  
    99  // Trace provides trace level logging
   100  func Trace(v ...interface{}) {
   101  	WithLevel(LevelTrace, v...)
   102  }
   103  
   104  // Tracef provides trace level logging
   105  func Tracef(format string, v ...interface{}) {
   106  	WithLevelf(LevelTrace, format, v...)
   107  }
   108  
   109  // Debug provides debug level logging
   110  func Debug(v ...interface{}) {
   111  	WithLevel(LevelDebug, v...)
   112  }
   113  
   114  // Debugf provides debug level logging
   115  func Debugf(format string, v ...interface{}) {
   116  	WithLevelf(LevelDebug, format, v...)
   117  }
   118  
   119  // Warn provides warn level logging
   120  func Warn(v ...interface{}) {
   121  	WithLevel(LevelWarn, v...)
   122  }
   123  
   124  // Warnf provides warn level logging
   125  func Warnf(format string, v ...interface{}) {
   126  	WithLevelf(LevelWarn, format, v...)
   127  }
   128  
   129  // Info provides info level logging
   130  func Info(v ...interface{}) {
   131  	WithLevel(LevelInfo, v...)
   132  }
   133  
   134  // Infof provides info level logging
   135  func Infof(format string, v ...interface{}) {
   136  	WithLevelf(LevelInfo, format, v...)
   137  }
   138  
   139  // Error provides warn level logging
   140  func Error(v ...interface{}) {
   141  	WithLevel(LevelError, v...)
   142  }
   143  
   144  // Errorf provides warn level logging
   145  func Errorf(format string, v ...interface{}) {
   146  	WithLevelf(LevelError, format, v...)
   147  }
   148  
   149  // Fatal logs with Log and then exits with os.Exit(1)
   150  func Fatal(v ...interface{}) {
   151  	WithLevel(LevelFatal, v...)
   152  	os.Exit(1)
   153  }
   154  
   155  // Fatalf logs with Logf and then exits with os.Exit(1)
   156  func Fatalf(format string, v ...interface{}) {
   157  	WithLevelf(LevelFatal, format, v...)
   158  	os.Exit(1)
   159  }
   160  
   161  // SetLevel sets the log level
   162  func SetLevel(l Level) {
   163  	DefaultLevel = l
   164  }
   165  
   166  // GetLevel returns the current level
   167  func GetLevel() Level {
   168  	return DefaultLevel
   169  }
   170  
   171  // Set a prefix for the logger
   172  func SetPrefix(p string) {
   173  	prefix = p
   174  }
   175  
   176  // Set service name
   177  func Name(name string) {
   178  	prefix = fmt.Sprintf("[%s]", name)
   179  }