2019-04-02 13:18:31 +05:30
|
|
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
2022-11-27 23:50:29 +05:30
|
|
|
// SPDX-License-Identifier: MIT
|
2019-04-02 13:18:31 +05:30
|
|
|
|
|
|
|
package log
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
import "os"
|
|
|
|
|
|
|
|
// Logger is the basic interface for logging
|
|
|
|
type Logger interface {
|
|
|
|
LevelLogger
|
|
|
|
Trace(format string, v ...interface{})
|
|
|
|
IsTrace() bool
|
|
|
|
Debug(format string, v ...interface{})
|
|
|
|
IsDebug() bool
|
|
|
|
Info(format string, v ...interface{})
|
|
|
|
IsInfo() bool
|
|
|
|
Warn(format string, v ...interface{})
|
|
|
|
IsWarn() bool
|
|
|
|
Error(format string, v ...interface{})
|
|
|
|
ErrorWithSkip(skip int, format string, v ...interface{})
|
|
|
|
IsError() bool
|
|
|
|
Critical(format string, v ...interface{})
|
|
|
|
CriticalWithSkip(skip int, format string, v ...interface{})
|
|
|
|
IsCritical() bool
|
|
|
|
Fatal(format string, v ...interface{})
|
|
|
|
FatalWithSkip(skip int, format string, v ...interface{})
|
|
|
|
IsFatal() bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// LevelLogger is the simplest logging interface
|
|
|
|
type LevelLogger interface {
|
|
|
|
Flush()
|
|
|
|
Close()
|
|
|
|
GetLevel() Level
|
|
|
|
Log(skip int, level Level, format string, v ...interface{}) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// SettableLogger is the interface of loggers which have subloggers
|
|
|
|
type SettableLogger interface {
|
|
|
|
SetLogger(name, provider, config string) error
|
|
|
|
DelLogger(name string) (bool, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StacktraceLogger is a logger that can log stacktraces
|
|
|
|
type StacktraceLogger interface {
|
|
|
|
GetStacktraceLevel() Level
|
|
|
|
}
|
|
|
|
|
|
|
|
// LevelLoggerLogger wraps a LevelLogger as a Logger
|
|
|
|
type LevelLoggerLogger struct {
|
|
|
|
LevelLogger
|
2019-04-02 13:18:31 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
// Trace records trace log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Trace(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, TRACE, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsTrace returns true if the logger is TRACE
|
|
|
|
func (l *LevelLoggerLogger) IsTrace() bool {
|
|
|
|
return l.GetLevel() <= TRACE
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Debug records debug log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Debug(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, DEBUG, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsDebug returns true if the logger is DEBUG
|
|
|
|
func (l *LevelLoggerLogger) IsDebug() bool {
|
|
|
|
return l.GetLevel() <= DEBUG
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Info records information log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Info(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, INFO, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsInfo returns true if the logger is INFO
|
|
|
|
func (l *LevelLoggerLogger) IsInfo() bool {
|
|
|
|
return l.GetLevel() <= INFO
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Warn records warning log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Warn(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, WARN, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsWarn returns true if the logger is WARN
|
|
|
|
func (l *LevelLoggerLogger) IsWarn() bool {
|
|
|
|
return l.GetLevel() <= WARN
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Error records error log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Error(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, ERROR, format, v...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ErrorWithSkip records error log from "skip" calls back from this function
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) ErrorWithSkip(skip int, format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(skip+1, ERROR, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsError returns true if the logger is ERROR
|
|
|
|
func (l *LevelLoggerLogger) IsError() bool {
|
|
|
|
return l.GetLevel() <= ERROR
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Critical records critical log
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Critical(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, CRITICAL, format, v...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CriticalWithSkip records critical log from "skip" calls back from this function
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) CriticalWithSkip(skip int, format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(skip+1, CRITICAL, format, v...)
|
|
|
|
}
|
|
|
|
|
2020-10-31 11:06:46 +05:30
|
|
|
// IsCritical returns true if the logger is CRITICAL
|
|
|
|
func (l *LevelLoggerLogger) IsCritical() bool {
|
|
|
|
return l.GetLevel() <= CRITICAL
|
|
|
|
}
|
|
|
|
|
2019-04-02 13:18:31 +05:30
|
|
|
// Fatal records fatal log and exit the process
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) Fatal(format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(1, FATAL, format, v...)
|
|
|
|
l.Close()
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// FatalWithSkip records fatal log from "skip" calls back from this function and exits the process
|
2020-10-31 11:06:46 +05:30
|
|
|
func (l *LevelLoggerLogger) FatalWithSkip(skip int, format string, v ...interface{}) {
|
2019-04-02 13:18:31 +05:30
|
|
|
l.Log(skip+1, FATAL, format, v...)
|
|
|
|
l.Close()
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
2020-10-31 11:06:46 +05:30
|
|
|
|
|
|
|
// IsFatal returns true if the logger is FATAL
|
|
|
|
func (l *LevelLoggerLogger) IsFatal() bool {
|
|
|
|
return l.GetLevel() <= FATAL
|
|
|
|
}
|