Source File
level.go
Belonging Package
go.uber.org/zap/zapcore
// Copyright (c) 2016 Uber Technologies, Inc.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to deal// in the Software without restriction, including without limitation the rights// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell// copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in// all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN// THE SOFTWARE.package zapcoreimport ()var errUnmarshalNilLevel = errors.New("can't unmarshal a nil *Level")// A Level is a logging priority. Higher levels are more important.type Level int8const (// DebugLevel logs are typically voluminous, and are usually disabled in// production.DebugLevel Level = iota - 1// InfoLevel is the default logging priority.InfoLevel// WarnLevel logs are more important than Info, but don't need individual// human review.WarnLevel// ErrorLevel logs are high-priority. If an application is running smoothly,// it shouldn't generate any error-level logs.ErrorLevel// DPanicLevel logs are particularly important errors. In development the// logger panics after writing the message.DPanicLevel// PanicLevel logs a message, then panics.PanicLevel// FatalLevel logs a message, then calls os.Exit(1).FatalLevel_minLevel = DebugLevel_maxLevel = FatalLevel// InvalidLevel is an invalid value for Level.//// Core implementations may panic if they see messages of this level.InvalidLevel = _maxLevel + 1)// ParseLevel parses a level based on the lower-case or all-caps ASCII// representation of the log level. If the provided ASCII representation is// invalid an error is returned.//// This is particularly useful when dealing with text input to configure log// levels.func ( string) (Level, error) {var Level:= .UnmarshalText([]byte())return ,}type leveledEnabler interface {LevelEnablerLevel() Level}// LevelOf reports the minimum enabled log level for the given LevelEnabler// from Zap's supported log levels, or [InvalidLevel] if none of them are// enabled.//// A LevelEnabler may implement a 'Level() Level' method to override the// behavior of this function.//// func (c *core) Level() Level {// return c.currentLevel// }//// It is recommended that [Core] implementations that wrap other cores use// LevelOf to retrieve the level of the wrapped core. For example,//// func (c *coreWrapper) Level() Level {// return zapcore.LevelOf(c.wrappedCore)// }func ( LevelEnabler) Level {if , := .(leveledEnabler); {return .Level()}for := _minLevel; <= _maxLevel; ++ {if .Enabled() {return}}return InvalidLevel}// String returns a lower-case ASCII representation of the log level.func ( Level) () string {switch {case DebugLevel:return "debug"case InfoLevel:return "info"case WarnLevel:return "warn"case ErrorLevel:return "error"case DPanicLevel:return "dpanic"case PanicLevel:return "panic"case FatalLevel:return "fatal"default:return fmt.Sprintf("Level(%d)", )}}// CapitalString returns an all-caps ASCII representation of the log level.func ( Level) () string {// Printing levels in all-caps is common enough that we should export this// functionality.switch {case DebugLevel:return "DEBUG"case InfoLevel:return "INFO"case WarnLevel:return "WARN"case ErrorLevel:return "ERROR"case DPanicLevel:return "DPANIC"case PanicLevel:return "PANIC"case FatalLevel:return "FATAL"default:return fmt.Sprintf("LEVEL(%d)", )}}// MarshalText marshals the Level to text. Note that the text representation// drops the -Level suffix (see example).func ( Level) () ([]byte, error) {return []byte(.String()), nil}// UnmarshalText unmarshals text to a level. Like MarshalText, UnmarshalText// expects the text representation of a Level to drop the -Level suffix (see// example).//// In particular, this makes it easy to configure logging levels using YAML,// TOML, or JSON files.func ( *Level) ( []byte) error {if == nil {return errUnmarshalNilLevel}if !.unmarshalText() && !.unmarshalText(bytes.ToLower()) {return fmt.Errorf("unrecognized level: %q", )}return nil}func ( *Level) ( []byte) bool {switch string() {case "debug", "DEBUG":* = DebugLevelcase "info", "INFO", "": // make the zero value useful* = InfoLevelcase "warn", "WARN":* = WarnLevelcase "error", "ERROR":* = ErrorLevelcase "dpanic", "DPANIC":* = DPanicLevelcase "panic", "PANIC":* = PanicLevelcase "fatal", "FATAL":* = FatalLeveldefault:return false}return true}// Set sets the level for the flag.Value interface.func ( *Level) ( string) error {return .UnmarshalText([]byte())}// Get gets the level for the flag.Getter interface.func ( *Level) () interface{} {return *}// Enabled returns true if the given level is at or above this level.func ( Level) ( Level) bool {return >=}// LevelEnabler decides whether a given logging level is enabled when logging a// message.//// Enablers are intended to be used to implement deterministic filters;// concerns like sampling are better implemented as a Core.//// Each concrete Level value implements a static LevelEnabler which returns// true for itself and all higher logging levels. For example WarnLevel.Enabled()// will return true for WarnLevel, ErrorLevel, DPanicLevel, PanicLevel, and// FatalLevel, but return false for InfoLevel and DebugLevel.type LevelEnabler interface {Enabled(Level) bool}
![]() |
The pages are generated with Golds v0.6.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |