code.gitea.io/gitea@v1.19.3/modules/log/logger.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package log 5 6 import "os" 7 8 // Logger is the basic interface for logging 9 type Logger interface { 10 LevelLogger 11 Trace(format string, v ...interface{}) 12 IsTrace() bool 13 Debug(format string, v ...interface{}) 14 IsDebug() bool 15 Info(format string, v ...interface{}) 16 IsInfo() bool 17 Warn(format string, v ...interface{}) 18 IsWarn() bool 19 Error(format string, v ...interface{}) 20 ErrorWithSkip(skip int, format string, v ...interface{}) 21 IsError() bool 22 Critical(format string, v ...interface{}) 23 CriticalWithSkip(skip int, format string, v ...interface{}) 24 IsCritical() bool 25 Fatal(format string, v ...interface{}) 26 FatalWithSkip(skip int, format string, v ...interface{}) 27 IsFatal() bool 28 } 29 30 // LevelLogger is the simplest logging interface 31 type LevelLogger interface { 32 Flush() 33 Close() 34 GetLevel() Level 35 Log(skip int, level Level, format string, v ...interface{}) error 36 } 37 38 // SettableLogger is the interface of loggers which have subloggers 39 type SettableLogger interface { 40 SetLogger(name, provider, config string) error 41 DelLogger(name string) (bool, error) 42 } 43 44 // StacktraceLogger is a logger that can log stacktraces 45 type StacktraceLogger interface { 46 GetStacktraceLevel() Level 47 } 48 49 // LevelLoggerLogger wraps a LevelLogger as a Logger 50 type LevelLoggerLogger struct { 51 LevelLogger 52 } 53 54 // Trace records trace log 55 func (l *LevelLoggerLogger) Trace(format string, v ...interface{}) { 56 l.Log(1, TRACE, format, v...) 57 } 58 59 // IsTrace returns true if the logger is TRACE 60 func (l *LevelLoggerLogger) IsTrace() bool { 61 return l.GetLevel() <= TRACE 62 } 63 64 // Debug records debug log 65 func (l *LevelLoggerLogger) Debug(format string, v ...interface{}) { 66 l.Log(1, DEBUG, format, v...) 67 } 68 69 // IsDebug returns true if the logger is DEBUG 70 func (l *LevelLoggerLogger) IsDebug() bool { 71 return l.GetLevel() <= DEBUG 72 } 73 74 // Info records information log 75 func (l *LevelLoggerLogger) Info(format string, v ...interface{}) { 76 l.Log(1, INFO, format, v...) 77 } 78 79 // IsInfo returns true if the logger is INFO 80 func (l *LevelLoggerLogger) IsInfo() bool { 81 return l.GetLevel() <= INFO 82 } 83 84 // Warn records warning log 85 func (l *LevelLoggerLogger) Warn(format string, v ...interface{}) { 86 l.Log(1, WARN, format, v...) 87 } 88 89 // IsWarn returns true if the logger is WARN 90 func (l *LevelLoggerLogger) IsWarn() bool { 91 return l.GetLevel() <= WARN 92 } 93 94 // Error records error log 95 func (l *LevelLoggerLogger) Error(format string, v ...interface{}) { 96 l.Log(1, ERROR, format, v...) 97 } 98 99 // ErrorWithSkip records error log from "skip" calls back from this function 100 func (l *LevelLoggerLogger) ErrorWithSkip(skip int, format string, v ...interface{}) { 101 l.Log(skip+1, ERROR, format, v...) 102 } 103 104 // IsError returns true if the logger is ERROR 105 func (l *LevelLoggerLogger) IsError() bool { 106 return l.GetLevel() <= ERROR 107 } 108 109 // Critical records critical log 110 func (l *LevelLoggerLogger) Critical(format string, v ...interface{}) { 111 l.Log(1, CRITICAL, format, v...) 112 } 113 114 // CriticalWithSkip records critical log from "skip" calls back from this function 115 func (l *LevelLoggerLogger) CriticalWithSkip(skip int, format string, v ...interface{}) { 116 l.Log(skip+1, CRITICAL, format, v...) 117 } 118 119 // IsCritical returns true if the logger is CRITICAL 120 func (l *LevelLoggerLogger) IsCritical() bool { 121 return l.GetLevel() <= CRITICAL 122 } 123 124 // Fatal records fatal log and exit the process 125 func (l *LevelLoggerLogger) Fatal(format string, v ...interface{}) { 126 l.Log(1, FATAL, format, v...) 127 l.Close() 128 os.Exit(1) 129 } 130 131 // FatalWithSkip records fatal log from "skip" calls back from this function and exits the process 132 func (l *LevelLoggerLogger) FatalWithSkip(skip int, format string, v ...interface{}) { 133 l.Log(skip+1, FATAL, format, v...) 134 l.Close() 135 os.Exit(1) 136 } 137 138 // IsFatal returns true if the logger is FATAL 139 func (l *LevelLoggerLogger) IsFatal() bool { 140 return l.GetLevel() <= FATAL 141 }