github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/sdk/go/src/sawtooth_sdk/logging/logger.go (about)

     1  /**
     2   * Copyright 2017 Intel Corporation
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   * ------------------------------------------------------------------------------
    16   */
    17  
    18  package logging
    19  
    20  import (
    21  	"fmt"
    22  	"io"
    23  	"log"
    24  	"os"
    25  )
    26  
    27  const (
    28  	CRITICAL = 50
    29  	ERROR    = 40
    30  	WARN     = 30
    31  	INFO     = 20
    32  	DEBUG    = 10
    33  )
    34  
    35  // Set the calldepth so we get the right file when logging
    36  const (
    37  	CALLDEPTH = 3
    38  	FLAGS     = log.Lshortfile | log.LstdFlags | log.Lmicroseconds
    39  )
    40  
    41  type Logger struct {
    42  	logger *log.Logger
    43  	level  int
    44  }
    45  
    46  var _LOGGER *Logger = nil
    47  
    48  func Get() *Logger {
    49  	if _LOGGER == nil {
    50  		_LOGGER = &Logger{
    51  			logger: log.New(os.Stdout, "", FLAGS),
    52  			level:  DEBUG,
    53  		}
    54  	}
    55  	return _LOGGER
    56  }
    57  
    58  func (self *Logger) SetLevel(level int) {
    59  	self.level = level
    60  }
    61  
    62  func (self *Logger) SetOutput(w io.Writer) {
    63  	self.logger.SetOutput(w)
    64  }
    65  
    66  func (self *Logger) Debugf(format string, v ...interface{}) {
    67  	if self.level <= DEBUG {
    68  		self.logf("DEBUG", format, v...)
    69  	}
    70  }
    71  
    72  func (self *Logger) Debug(v ...interface{}) {
    73  	if self.level <= DEBUG {
    74  		self.log("DEBUG", v...)
    75  	}
    76  }
    77  
    78  func (self *Logger) Infof(format string, v ...interface{}) {
    79  	if self.level <= INFO {
    80  		self.logf("INFO", format, v...)
    81  	}
    82  }
    83  
    84  func (self *Logger) Info(v ...interface{}) {
    85  	if self.level <= INFO {
    86  		self.log("INFO", v...)
    87  	}
    88  }
    89  
    90  func (self *Logger) Warnf(format string, v ...interface{}) {
    91  	if self.level <= WARN {
    92  		self.logf("WARN", format, v...)
    93  	}
    94  }
    95  
    96  func (self *Logger) Warn(v ...interface{}) {
    97  	if self.level <= WARN {
    98  		self.log("WARN", v...)
    99  	}
   100  }
   101  
   102  func (self *Logger) Errorf(format string, v ...interface{}) {
   103  	if self.level <= ERROR {
   104  		self.logf("ERROR", format, v...)
   105  	}
   106  }
   107  
   108  func (self *Logger) Error(v ...interface{}) {
   109  	if self.level <= ERROR {
   110  		self.log("ERROR", v...)
   111  	}
   112  }
   113  
   114  func (self *Logger) Criticalf(format string, v ...interface{}) {
   115  	if self.level <= CRITICAL {
   116  		self.logf("CRITICAL", format, v...)
   117  	}
   118  }
   119  
   120  func (self *Logger) Critical(v ...interface{}) {
   121  	if self.level <= CRITICAL {
   122  		self.log("CRITICAL", v...)
   123  	}
   124  }
   125  
   126  func (self *Logger) logf(prefix string, format string, v ...interface{}) {
   127  	self.logger.Output(CALLDEPTH, "["+prefix+"] "+fmt.Sprintf(format, v...))
   128  }
   129  
   130  func (self *Logger) log(prefix string, v ...interface{}) {
   131  	self.logger.Output(CALLDEPTH, "["+prefix+"] "+fmt.Sprint(v...))
   132  }