forked from mirrors/statsd_exporter
98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
|
// Copyright 2021 The Prometheus Authors
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
package level
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/go-kit/log"
|
||
|
"github.com/go-kit/log/level"
|
||
|
)
|
||
|
|
||
|
var logLevel = LevelInfo
|
||
|
|
||
|
// A Level is a logging priority. Higher levels are more important.
|
||
|
type Level int
|
||
|
|
||
|
const (
|
||
|
// LevelDebug logs are typically voluminous, and are usually disabled in
|
||
|
// production.
|
||
|
LevelDebug Level = iota
|
||
|
// LevelInfo is the default logging priority.
|
||
|
LevelInfo
|
||
|
// LevelWarn logs are more important than Info, but don't need individual
|
||
|
// human review.
|
||
|
LevelWarn
|
||
|
// LevelError logs are high-priority. If an application is running smoothly,
|
||
|
// it shouldn't generate any error-level logs.
|
||
|
LevelError
|
||
|
)
|
||
|
|
||
|
var emptyLogger = &EmptyLogger{}
|
||
|
|
||
|
type EmptyLogger struct{}
|
||
|
|
||
|
func (l *EmptyLogger) Log(keyvals ...interface{}) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// SetLogLevel sets the log level.
|
||
|
func SetLogLevel(level string) error {
|
||
|
switch level {
|
||
|
case "debug":
|
||
|
logLevel = LevelDebug
|
||
|
case "info":
|
||
|
logLevel = LevelInfo
|
||
|
case "warn":
|
||
|
logLevel = LevelWarn
|
||
|
case "error":
|
||
|
logLevel = LevelError
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognized log level %s", level)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Error returns a logger that includes a Key/ErrorValue pair.
|
||
|
func Error(logger log.Logger) log.Logger {
|
||
|
if logLevel <= LevelError {
|
||
|
return level.Error(logger)
|
||
|
}
|
||
|
return emptyLogger
|
||
|
}
|
||
|
|
||
|
// Warn returns a logger that includes a Key/WarnValue pair.
|
||
|
func Warn(logger log.Logger) log.Logger {
|
||
|
if logLevel <= LevelWarn {
|
||
|
return level.Warn(logger)
|
||
|
}
|
||
|
return emptyLogger
|
||
|
}
|
||
|
|
||
|
// Info returns a logger that includes a Key/InfoValue pair.
|
||
|
func Info(logger log.Logger) log.Logger {
|
||
|
if logLevel <= LevelInfo {
|
||
|
return level.Info(logger)
|
||
|
}
|
||
|
return emptyLogger
|
||
|
}
|
||
|
|
||
|
// Debug returns a logger that includes a Key/DebugValue pair.
|
||
|
func Debug(logger log.Logger) log.Logger {
|
||
|
if logLevel <= LevelDebug {
|
||
|
return level.Debug(logger)
|
||
|
}
|
||
|
return emptyLogger
|
||
|
}
|