github.com/hasnat/dolt/go@v0.0.0-20210628190320-9eb5d843fbb7/store/util/verbose/verbose.go (about) 1 // Copyright 2019 Dolthub, 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 // 15 // This file incorporates work covered by the following copyright and 16 // permission notice: 17 // 18 // Copyright 2016 Attic Labs, Inc. All rights reserved. 19 // Licensed under the Apache License, version 2.0: 20 // http://www.apache.org/licenses/LICENSE-2.0 21 22 package verbose 23 24 import ( 25 "context" 26 "os" 27 28 flag "github.com/juju/gnuflag" 29 "go.uber.org/zap" 30 "go.uber.org/zap/zapcore" 31 ) 32 33 var ( 34 verbose bool 35 quiet bool 36 ) 37 38 // RegisterVerboseFlags registers -v|--verbose flags for general usage 39 func RegisterVerboseFlags(flags *flag.FlagSet) { 40 flags.BoolVar(&verbose, "verbose", false, "show more") 41 flags.BoolVar(&verbose, "v", false, "") 42 } 43 44 func SetVerbose(v bool) { 45 verbose = v 46 } 47 48 // A function which will be called for logging throughout the doltcore/store 49 // layer. Defaults to logging to STDERR at Debug level if --verbose is set and 50 // Warn level if --verbose is not set. 51 // 52 // May be called with `nil` context in non-context-aware functions. 53 var Logger func(ctx context.Context) *zap.Logger 54 55 func init() { 56 enabler := zap.LevelEnablerFunc(func(l zapcore.Level) bool { 57 if verbose { 58 return zapcore.DebugLevel.Enabled(l) 59 } else { 60 return zapcore.WarnLevel.Enabled(l) 61 } 62 }) 63 encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()) 64 core := zapcore.NewCore(encoder, zapcore.Lock(os.Stderr), enabler) 65 l := zap.New(core) 66 Logger = func(ctx context.Context) *zap.Logger { 67 return l 68 } 69 }