github.com/micro/go-micro/v2@v2.9.1/util/log/log.go (about)

     1  // Package log is a global internal logger
     2  // DEPRECATED: this is frozen package, use github.com/micro/go-micro/v2/logger
     3  package log
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"sync/atomic"
     9  
    10  	dlog "github.com/micro/go-micro/v2/debug/log"
    11  	nlog "github.com/micro/go-micro/v2/logger"
    12  )
    13  
    14  // level is a log level
    15  type Level int32
    16  
    17  const (
    18  	LevelFatal Level = iota
    19  	LevelError
    20  	LevelWarn
    21  	LevelInfo
    22  	LevelDebug
    23  	LevelTrace
    24  )
    25  
    26  type elog struct {
    27  	dlog dlog.Log
    28  }
    29  
    30  var (
    31  	// the local logger
    32  	logger dlog.Log = &elog{}
    33  
    34  	// default log level is info
    35  	level = LevelInfo
    36  
    37  	// prefix for all messages
    38  	prefix string
    39  )
    40  
    41  func levelToLevel(l Level) nlog.Level {
    42  	switch l {
    43  	case LevelTrace:
    44  		return nlog.TraceLevel
    45  	case LevelDebug:
    46  		return nlog.DebugLevel
    47  	case LevelWarn:
    48  		return nlog.WarnLevel
    49  	case LevelInfo:
    50  		return nlog.InfoLevel
    51  	case LevelError:
    52  		return nlog.ErrorLevel
    53  	case LevelFatal:
    54  		return nlog.FatalLevel
    55  	}
    56  	return nlog.InfoLevel
    57  }
    58  
    59  func init() {
    60  	switch os.Getenv("MICRO_LOG_LEVEL") {
    61  	case "trace":
    62  		level = LevelTrace
    63  	case "debug":
    64  		level = LevelDebug
    65  	case "warn":
    66  		level = LevelWarn
    67  	case "info":
    68  		level = LevelInfo
    69  	case "error":
    70  		level = LevelError
    71  	case "fatal":
    72  		level = LevelFatal
    73  	}
    74  }
    75  
    76  func (l Level) String() string {
    77  	switch l {
    78  	case LevelTrace:
    79  		return "trace"
    80  	case LevelDebug:
    81  		return "debug"
    82  	case LevelWarn:
    83  		return "warn"
    84  	case LevelInfo:
    85  		return "info"
    86  	case LevelError:
    87  		return "error"
    88  	case LevelFatal:
    89  		return "fatal"
    90  	default:
    91  		return "unknown"
    92  	}
    93  }
    94  
    95  func (el *elog) Read(opt ...dlog.ReadOption) ([]dlog.Record, error) {
    96  	return el.dlog.Read(opt...)
    97  }
    98  
    99  func (el *elog) Write(r dlog.Record) error {
   100  	return el.dlog.Write(r)
   101  }
   102  
   103  func (el *elog) Stream() (dlog.Stream, error) {
   104  	return el.dlog.Stream()
   105  }
   106  
   107  // Log makes use of github.com/micro/debug/log
   108  func Log(v ...interface{}) {
   109  	if len(prefix) > 0 {
   110  		v = append([]interface{}{prefix, " "}, v...)
   111  	}
   112  	nlog.DefaultLogger.Log(levelToLevel(level), v)
   113  }
   114  
   115  // Logf makes use of github.com/micro/debug/log
   116  func Logf(format string, v ...interface{}) {
   117  	if len(prefix) > 0 {
   118  		format = prefix + " " + format
   119  	}
   120  	nlog.DefaultLogger.Log(levelToLevel(level), format, v)
   121  }
   122  
   123  // WithLevel logs with the level specified
   124  func WithLevel(l Level, v ...interface{}) {
   125  	if l > level {
   126  		return
   127  	}
   128  	Log(v...)
   129  }
   130  
   131  // WithLevel logs with the level specified
   132  func WithLevelf(l Level, format string, v ...interface{}) {
   133  	if l > level {
   134  		return
   135  	}
   136  	Logf(format, v...)
   137  }
   138  
   139  // Trace provides trace level logging
   140  func Trace(v ...interface{}) {
   141  	WithLevel(LevelTrace, v...)
   142  }
   143  
   144  // Tracef provides trace level logging
   145  func Tracef(format string, v ...interface{}) {
   146  	WithLevelf(LevelTrace, format, v...)
   147  }
   148  
   149  // Debug provides debug level logging
   150  func Debug(v ...interface{}) {
   151  	WithLevel(LevelDebug, v...)
   152  }
   153  
   154  // Debugf provides debug level logging
   155  func Debugf(format string, v ...interface{}) {
   156  	WithLevelf(LevelDebug, format, v...)
   157  }
   158  
   159  // Warn provides warn level logging
   160  func Warn(v ...interface{}) {
   161  	WithLevel(LevelWarn, v...)
   162  }
   163  
   164  // Warnf provides warn level logging
   165  func Warnf(format string, v ...interface{}) {
   166  	WithLevelf(LevelWarn, format, v...)
   167  }
   168  
   169  // Info provides info level logging
   170  func Info(v ...interface{}) {
   171  	WithLevel(LevelInfo, v...)
   172  }
   173  
   174  // Infof provides info level logging
   175  func Infof(format string, v ...interface{}) {
   176  	WithLevelf(LevelInfo, format, v...)
   177  }
   178  
   179  // Error provides warn level logging
   180  func Error(v ...interface{}) {
   181  	WithLevel(LevelError, v...)
   182  }
   183  
   184  // Errorf provides warn level logging
   185  func Errorf(format string, v ...interface{}) {
   186  	WithLevelf(LevelError, format, v...)
   187  }
   188  
   189  // Fatal logs with Log and then exits with os.Exit(1)
   190  func Fatal(v ...interface{}) {
   191  	WithLevel(LevelFatal, v...)
   192  }
   193  
   194  // Fatalf logs with Logf and then exits with os.Exit(1)
   195  func Fatalf(format string, v ...interface{}) {
   196  	WithLevelf(LevelFatal, format, v...)
   197  }
   198  
   199  // SetLogger sets the local logger
   200  func SetLogger(l dlog.Log) {
   201  	logger = l
   202  }
   203  
   204  // GetLogger returns the local logger
   205  func GetLogger() dlog.Log {
   206  	return logger
   207  }
   208  
   209  // SetLevel sets the log level
   210  func SetLevel(l Level) {
   211  	atomic.StoreInt32((*int32)(&level), int32(l))
   212  }
   213  
   214  // GetLevel returns the current level
   215  func GetLevel() Level {
   216  	return level
   217  }
   218  
   219  // Set a prefix for the logger
   220  func SetPrefix(p string) {
   221  	prefix = p
   222  }
   223  
   224  // Set service name
   225  func Name(name string) {
   226  	prefix = fmt.Sprintf("[%s]", name)
   227  }