code.gitea.io/gitea@v1.19.3/modules/log/level.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package log 5 6 import ( 7 "bytes" 8 "fmt" 9 "os" 10 "strings" 11 12 "code.gitea.io/gitea/modules/json" 13 ) 14 15 // Level is the level of the logger 16 type Level int 17 18 const ( 19 // TRACE represents the lowest log level 20 TRACE Level = iota 21 // DEBUG is for debug logging 22 DEBUG 23 // INFO is for information 24 INFO 25 // WARN is for warning information 26 WARN 27 // ERROR is for error reporting 28 ERROR 29 // CRITICAL is for critical errors 30 CRITICAL 31 // FATAL is for fatal errors 32 FATAL 33 // NONE is for no logging 34 NONE 35 ) 36 37 var toString = map[Level]string{ 38 TRACE: "trace", 39 DEBUG: "debug", 40 INFO: "info", 41 WARN: "warn", 42 ERROR: "error", 43 CRITICAL: "critical", 44 FATAL: "fatal", 45 NONE: "none", 46 } 47 48 var toLevel = map[string]Level{ 49 "trace": TRACE, 50 "debug": DEBUG, 51 "info": INFO, 52 "warn": WARN, 53 "error": ERROR, 54 "critical": CRITICAL, 55 "fatal": FATAL, 56 "none": NONE, 57 } 58 59 // Levels returns all the possible logging levels 60 func Levels() []string { 61 keys := make([]string, 0) 62 for key := range toLevel { 63 keys = append(keys, key) 64 } 65 return keys 66 } 67 68 func (l Level) String() string { 69 s, ok := toString[l] 70 if ok { 71 return s 72 } 73 return "info" 74 } 75 76 // Color returns the color string for this Level 77 func (l Level) Color() *[]byte { 78 color, ok := levelToColor[l] 79 if ok { 80 return &(color) 81 } 82 none := levelToColor[NONE] 83 return &none 84 } 85 86 // MarshalJSON takes a Level and turns it into text 87 func (l Level) MarshalJSON() ([]byte, error) { 88 buffer := bytes.NewBufferString(`"`) 89 buffer.WriteString(toString[l]) 90 buffer.WriteString(`"`) 91 return buffer.Bytes(), nil 92 } 93 94 // FromString takes a level string and returns a Level 95 func FromString(level string) Level { 96 temp, ok := toLevel[strings.ToLower(level)] 97 if !ok { 98 return INFO 99 } 100 return temp 101 } 102 103 // UnmarshalJSON takes text and turns it into a Level 104 func (l *Level) UnmarshalJSON(b []byte) error { 105 var tmp interface{} 106 err := json.Unmarshal(b, &tmp) 107 if err != nil { 108 fmt.Fprintf(os.Stderr, "Err: %v", err) 109 return err 110 } 111 112 switch v := tmp.(type) { 113 case string: 114 *l = FromString(v) 115 case int: 116 *l = FromString(Level(v).String()) 117 default: 118 *l = INFO 119 } 120 return nil 121 }