github.com/uber/kraken@v0.1.4/utils/log/log.go (about) 1 // Copyright (c) 2016-2019 Uber Technologies, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 package log 15 16 // This package wraps logger functionality that is being used 17 // in kraken providing seamless migration tooling if needed 18 // and hides out some initialization details 19 20 import ( 21 "go.uber.org/zap" 22 "go.uber.org/zap/zapcore" 23 ) 24 25 var ( 26 _default *zap.SugaredLogger 27 ) 28 29 // configure a default logger 30 func init() { 31 zapConfig := zap.NewProductionConfig() 32 zapConfig.Encoding = "console" 33 zapConfig.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder 34 zapConfig.DisableStacktrace = true 35 36 ConfigureLogger(zapConfig) 37 } 38 39 // ConfigureLogger configures a global zap logger instance. 40 func ConfigureLogger(zapConfig zap.Config) *zap.SugaredLogger { 41 logger, err := zapConfig.Build() 42 if err != nil { 43 panic(err) 44 } 45 46 // Skip this wrapper in a call stack. 47 logger = logger.WithOptions(zap.AddCallerSkip(1)) 48 49 _default = logger.Sugar() 50 return _default 51 } 52 53 // SetGlobalLogger sets the global logger. 54 func SetGlobalLogger(l *zap.SugaredLogger) { 55 _default = l 56 } 57 58 // Default returns the default global logger. 59 func Default() *zap.SugaredLogger { 60 return _default 61 } 62 63 // Debug uses fmt.Sprint to construct and log a message. 64 func Debug(args ...interface{}) { 65 Default().Debug(args...) 66 } 67 68 // Info uses fmt.Sprint to construct and log a message. 69 func Info(args ...interface{}) { 70 Default().Info(args...) 71 } 72 73 // Warn uses fmt.Sprint to construct and log a message. 74 func Warn(args ...interface{}) { 75 Default().Warn(args...) 76 } 77 78 // Error uses fmt.Sprint to construct and log a message. 79 func Error(args ...interface{}) { 80 Default().Error(args...) 81 } 82 83 // Panic uses fmt.Sprint to construct and log a message, then panics. 84 func Panic(args ...interface{}) { 85 Default().Panic(args...) 86 } 87 88 // Fatal uses fmt.Sprint to construct and log a message, then calls os.Exit. 89 func Fatal(args ...interface{}) { 90 Default().Fatal(args...) 91 } 92 93 // Debugf uses fmt.Sprintf to log a templated message. 94 func Debugf(template string, args ...interface{}) { 95 Default().Debugf(template, args...) 96 } 97 98 // Infof uses fmt.Sprintf to log a templated message. 99 func Infof(template string, args ...interface{}) { 100 Default().Infof(template, args...) 101 } 102 103 // Warnf uses fmt.Sprintf to log a templated message. 104 func Warnf(template string, args ...interface{}) { 105 Default().Warnf(template, args...) 106 } 107 108 // Errorf uses fmt.Sprintf to log a templated message. 109 func Errorf(template string, args ...interface{}) { 110 Default().Errorf(template, args...) 111 } 112 113 // Panicf uses fmt.Sprintf to log a templated message, then panics. 114 func Panicf(template string, args ...interface{}) { 115 Default().Panicf(template, args...) 116 } 117 118 // Fatalf uses fmt.Sprintf to log a templated message, then calls os.Exit. 119 func Fatalf(template string, args ...interface{}) { 120 Default().Fatalf(template, args...) 121 } 122 123 // Debugw logs a message with some additional context. The variadic key-value 124 // pairs are treated as they are in With. 125 // 126 // When debug-level logging is disabled, this is much faster than 127 // s.With(keysAndValues).Debug(msg) 128 func Debugw(msg string, keysAndValues ...interface{}) { 129 Default().Debugw(msg, keysAndValues...) 130 } 131 132 // Infow logs a message with some additional context. The variadic key-value 133 // pairs are treated as they are in With. 134 func Infow(msg string, keysAndValues ...interface{}) { 135 Default().Infow(msg, keysAndValues...) 136 } 137 138 // Warnw logs a message with some additional context. The variadic key-value 139 // pairs are treated as they are in With. 140 func Warnw(msg string, keysAndValues ...interface{}) { 141 Default().Warnw(msg, keysAndValues...) 142 } 143 144 // Errorw logs a message with some additional context. The variadic key-value 145 // pairs are treated as they are in With. 146 func Errorw(msg string, keysAndValues ...interface{}) { 147 Default().Errorw(msg, keysAndValues...) 148 } 149 150 // Panicw logs a message with some additional context, then panics. The 151 // variadic key-value pairs are treated as they are in With. 152 func Panicw(msg string, keysAndValues ...interface{}) { 153 Default().Panicw(msg, keysAndValues...) 154 } 155 156 // Fatalw logs a message with some additional context, then calls os.Exit. The 157 // variadic key-value pairs are treated as they are in With. 158 func Fatalw(msg string, keysAndValues ...interface{}) { 159 Default().Fatalw(msg, keysAndValues...) 160 } 161 162 // With adds a variadic number of fields to the logging context. 163 // It accepts a mix of strongly-typed zapcore.Field objects and loosely-typed key-value pairs. 164 func With(args ...interface{}) *zap.SugaredLogger { 165 return Default().With(args...) 166 }