1// Copyright 2016 The Cayley Authors. All rights reserved. 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// Package clog provides a logging interface for cayley packages. 16package clog 17 18import "log" 19 20// Logger is the clog logging interface. 21type Logger interface { 22 Infof(format string, args ...interface{}) 23 Warningf(format string, args ...interface{}) 24 Errorf(format string, args ...interface{}) 25 Fatalf(format string, args ...interface{}) 26 V(int) bool 27 SetV(level int) 28} 29 30var logger Logger = &stdlog{ 31 verbosity: 0, 32} 33 34// SetLogger set the clog logging implementation. 35func SetLogger(l Logger) { logger = l } 36 37var verbosity int 38 39// V returns whether the current clog verbosity is above the specified level. 40func V(level int) bool { 41 if logger == nil { 42 return false 43 } 44 return logger.V(level) 45} 46 47// SetV sets the clog verbosity level. 48func SetV(level int) { 49 if logger != nil { 50 logger.SetV(level) 51 } 52} 53 54// Infof logs information level messages. 55func Infof(format string, args ...interface{}) { 56 if logger != nil { 57 logger.Infof(format, args...) 58 } 59} 60 61// Warningf logs warning level messages. 62func Warningf(format string, args ...interface{}) { 63 if logger != nil { 64 logger.Warningf(format, args...) 65 } 66} 67 68// Errorf logs error level messages. 69func Errorf(format string, args ...interface{}) { 70 if logger != nil { 71 logger.Errorf(format, args...) 72 } 73} 74 75// Fatalf logs fatal messages and terminates the program. 76func Fatalf(format string, args ...interface{}) { 77 if logger != nil { 78 logger.Fatalf(format, args...) 79 } 80} 81 82// stdlog wraps the standard library logger. 83type stdlog struct { 84 verbosity int 85} 86 87func (stdlog) Infof(format string, args ...interface{}) { log.Printf(format, args...) } 88func (stdlog) Warningf(format string, args ...interface{}) { log.Printf("WARN: "+format, args...) } 89func (stdlog) Errorf(format string, args ...interface{}) { log.Printf("ERROR: "+format, args...) } 90func (stdlog) Fatalf(format string, args ...interface{}) { log.Fatalf("FATAL: "+format, args...) } 91func (s stdlog) V(level int) bool { return s.verbosity >= level } 92func (s *stdlog) SetV(level int) { s.verbosity = level } 93