Compare commits
6 Commits
d3d9306aeb
...
v0.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 253e6a20d8 | |||
| 4db3de09b4 | |||
| 4d388313c9 | |||
| b7e1b84eaf | |||
| 82cdb2c35e | |||
| 30050a6815 |
128
levellogger.go
128
levellogger.go
@@ -16,75 +16,115 @@ func NewLevelLogger(out io.Writer, level LogLevel) LevelLogger {
|
|||||||
ll.traceLog = log.New(out, "[TRACE]\t", log.Ldate|log.Ltime|log.Llongfile)
|
ll.traceLog = log.New(out, "[TRACE]\t", log.Ldate|log.Ltime|log.Llongfile)
|
||||||
ll.debugLog = log.New(out, "[DEBUG]\t", log.Ldate|log.Ltime|log.Llongfile)
|
ll.debugLog = log.New(out, "[DEBUG]\t", log.Ldate|log.Ltime|log.Llongfile)
|
||||||
ll.infoLog = log.New(out, "[INFO]\t", log.Ldate|log.Ltime)
|
ll.infoLog = log.New(out, "[INFO]\t", log.Ldate|log.Ltime)
|
||||||
|
ll.securityLog = log.New(out, "[SECURITY]\t", log.Ldate|log.Ltime)
|
||||||
ll.warnLog = log.New(out, "[WARN]\t", log.Ldate|log.Ltime)
|
ll.warnLog = log.New(out, "[WARN]\t", log.Ldate|log.Ltime)
|
||||||
ll.errorLog = log.New(out, "[ERROR]\t", log.Ldate|log.Ltime|log.Llongfile)
|
ll.errorLog = log.New(out, "[ERROR]\t", log.Ldate|log.Ltime|log.Llongfile)
|
||||||
ll.fatalLog = log.New(out, "[FATAL]\t", log.Ldate|log.Ltime|log.Llongfile)
|
ll.fatalLog = log.New(out, "[FATAL]\t", log.Ldate|log.Ltime|log.Llongfile)
|
||||||
|
ll.blankLog = log.New(out, "", 0)
|
||||||
|
|
||||||
return ll
|
return ll
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's a log -- line output
|
// It's a log -- line output
|
||||||
// so only use Println versions
|
// so only use Println versions
|
||||||
func (ll LevelLogger) Panic(v ...any) {
|
|
||||||
|
// always print panic and fatal log messages
|
||||||
|
func (ll *LevelLogger) Panic(v ...any) {
|
||||||
ll.panicLog.Panicln(v...)
|
ll.panicLog.Panicln(v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Panicf(format string, v ...any) {
|
func (ll *LevelLogger) Panicf(format string, v ...any) {
|
||||||
ll.panicLog.Panicf(format, v...)
|
ll.panicLog.Panicf(format, v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Trace(v ...any) {
|
func (ll *LevelLogger) Trace(v ...any) {
|
||||||
|
if TraceLevel >= ll.CurrentLevel {
|
||||||
ll.traceLog.Println(v...)
|
ll.traceLog.Println(v...)
|
||||||
ll.traceLog.Println(debug.Stack())
|
ll.traceLog.Println(debug.Stack())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Tracef(format string, v ...any) {
|
func (ll *LevelLogger) Tracef(format string, v ...any) {
|
||||||
|
if TraceLevel >= ll.CurrentLevel {
|
||||||
ll.traceLog.Printf(format, v...)
|
ll.traceLog.Printf(format, v...)
|
||||||
ll.traceLog.Println(debug.Stack())
|
ll.traceLog.Println(debug.Stack())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Debug(v ...any) {
|
func (ll *LevelLogger) Debug(v ...any) {
|
||||||
|
if DebugLevel >= ll.CurrentLevel {
|
||||||
ll.debugLog.Println(v...)
|
ll.debugLog.Println(v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Debugf(format string, v ...any) {
|
func (ll *LevelLogger) Debugf(format string, v ...any) {
|
||||||
|
if DebugLevel >= ll.CurrentLevel {
|
||||||
ll.debugLog.Printf(format, v...)
|
ll.debugLog.Printf(format, v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Info(v ...any) {
|
func (ll *LevelLogger) Info(v ...any) {
|
||||||
|
|
||||||
|
if InfoLevel >= ll.CurrentLevel {
|
||||||
ll.infoLog.Println(v...)
|
ll.infoLog.Println(v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Infof(format string, v ...any) {
|
func (ll *LevelLogger) Infof(format string, v ...any) {
|
||||||
|
if InfoLevel >= ll.CurrentLevel {
|
||||||
ll.infoLog.Printf(format, v...)
|
ll.infoLog.Printf(format, v...)
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Warn(v ...any) {
|
func (ll *LevelLogger) Secure(v ...any) {
|
||||||
|
|
||||||
|
if SecurityLevel >= ll.CurrentLevel {
|
||||||
|
ll.securityLog.Println(v...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ll *LevelLogger) Securef(format string, v ...any) {
|
||||||
|
if SecurityLevel >= ll.CurrentLevel {
|
||||||
|
ll.securityLog.Printf(format, v...)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ll *LevelLogger) Warn(v ...any) {
|
||||||
|
if WarnLevel >= ll.CurrentLevel {
|
||||||
ll.warnLog.Println(v...)
|
ll.warnLog.Println(v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Warnf(format string, v ...any) {
|
func (ll *LevelLogger) Warnf(format string, v ...any) {
|
||||||
|
if WarnLevel >= ll.CurrentLevel {
|
||||||
ll.warnLog.Printf(format, v...)
|
ll.warnLog.Printf(format, v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Error(v ...any) {
|
func (ll *LevelLogger) Error(v ...any) {
|
||||||
|
if ErrorLevel >= ll.CurrentLevel {
|
||||||
ll.errorLog.Println(v...)
|
ll.errorLog.Println(v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Errorf(format string, v ...any) {
|
func (ll *LevelLogger) Errorf(format string, v ...any) {
|
||||||
|
if ErrorLevel >= ll.CurrentLevel {
|
||||||
ll.errorLog.Printf(format, v...)
|
ll.errorLog.Printf(format, v...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Fatal(v ...any) {
|
func (ll *LevelLogger) Fatal(v ...any) {
|
||||||
ll.fatalLog.Fatalln(v...)
|
ll.fatalLog.Fatalln(v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) Fatalf(format string, v ...any) {
|
func (ll *LevelLogger) Fatalf(format string, v ...any) {
|
||||||
ll.fatalLog.Fatalf(format, v...)
|
ll.fatalLog.Fatalf(format, v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// spelling: Panic, Trace, Debug, Info, Warn, Error, Fatal
|
// spelling: Panic, Trace, Debug, Info, Warn, Error, Fatal
|
||||||
func (ll LevelLogger) SetPrefix(logname string, prefix string) {
|
func (ll *LevelLogger) SetPrefix(logname string, prefix string) {
|
||||||
switch {
|
switch {
|
||||||
case logname == "Panic":
|
case logname == "Panic":
|
||||||
ll.panicLog.SetPrefix(prefix)
|
ll.panicLog.SetPrefix(prefix)
|
||||||
@@ -94,6 +134,8 @@ func (ll LevelLogger) SetPrefix(logname string, prefix string) {
|
|||||||
ll.debugLog.SetPrefix(prefix)
|
ll.debugLog.SetPrefix(prefix)
|
||||||
case logname == "Info":
|
case logname == "Info":
|
||||||
ll.infoLog.SetPrefix(prefix)
|
ll.infoLog.SetPrefix(prefix)
|
||||||
|
case logname == "Security":
|
||||||
|
ll.securityLog.SetPrefix(prefix)
|
||||||
case logname == "Warn":
|
case logname == "Warn":
|
||||||
ll.warnLog.SetPrefix(prefix)
|
ll.warnLog.SetPrefix(prefix)
|
||||||
case logname == "Error":
|
case logname == "Error":
|
||||||
@@ -103,7 +145,7 @@ func (ll LevelLogger) SetPrefix(logname string, prefix string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) SetOutput(logname string, newout io.Writer) {
|
func (ll *LevelLogger) SetOutput(logname string, newout io.Writer) {
|
||||||
switch {
|
switch {
|
||||||
case logname == "Panic":
|
case logname == "Panic":
|
||||||
ll.panicLog.SetOutput(newout)
|
ll.panicLog.SetOutput(newout)
|
||||||
@@ -113,6 +155,8 @@ func (ll LevelLogger) SetOutput(logname string, newout io.Writer) {
|
|||||||
ll.debugLog.SetOutput(newout)
|
ll.debugLog.SetOutput(newout)
|
||||||
case logname == "Info":
|
case logname == "Info":
|
||||||
ll.infoLog.SetOutput(newout)
|
ll.infoLog.SetOutput(newout)
|
||||||
|
case logname == "Security":
|
||||||
|
ll.securityLog.SetOutput(newout)
|
||||||
case logname == "Warn":
|
case logname == "Warn":
|
||||||
ll.warnLog.SetOutput(newout)
|
ll.warnLog.SetOutput(newout)
|
||||||
case logname == "Error":
|
case logname == "Error":
|
||||||
@@ -122,7 +166,7 @@ func (ll LevelLogger) SetOutput(logname string, newout io.Writer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ll LevelLogger) SetFlags(logname string, newFlags int) {
|
func (ll *LevelLogger) SetFlags(logname string, newFlags int) {
|
||||||
switch {
|
switch {
|
||||||
case logname == "Panic":
|
case logname == "Panic":
|
||||||
ll.panicLog.SetFlags(newFlags)
|
ll.panicLog.SetFlags(newFlags)
|
||||||
@@ -132,6 +176,8 @@ func (ll LevelLogger) SetFlags(logname string, newFlags int) {
|
|||||||
ll.debugLog.SetFlags(newFlags)
|
ll.debugLog.SetFlags(newFlags)
|
||||||
case logname == "Info":
|
case logname == "Info":
|
||||||
ll.infoLog.SetFlags(newFlags)
|
ll.infoLog.SetFlags(newFlags)
|
||||||
|
case logname == "Security":
|
||||||
|
ll.securityLog.SetFlags(newFlags)
|
||||||
case logname == "Warn":
|
case logname == "Warn":
|
||||||
ll.warnLog.SetFlags(newFlags)
|
ll.warnLog.SetFlags(newFlags)
|
||||||
case logname == "Error":
|
case logname == "Error":
|
||||||
@@ -140,3 +186,51 @@ func (ll LevelLogger) SetFlags(logname string, newFlags int) {
|
|||||||
ll.fatalLog.SetFlags(newFlags)
|
ll.fatalLog.SetFlags(newFlags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ll *LevelLogger) SetLoggingLevel(l int) {
|
||||||
|
if l < 0 || l > 8 {
|
||||||
|
ll.CurrentLevel = 4 // default
|
||||||
|
} else {
|
||||||
|
switch l {
|
||||||
|
case 0:
|
||||||
|
ll.CurrentLevel = LevelLoggerOff
|
||||||
|
case 1:
|
||||||
|
ll.CurrentLevel = PanicLevel
|
||||||
|
case 2:
|
||||||
|
ll.CurrentLevel = TraceLevel
|
||||||
|
case 3:
|
||||||
|
ll.CurrentLevel = DebugLevel
|
||||||
|
case 4:
|
||||||
|
ll.CurrentLevel = InfoLevel
|
||||||
|
case 5:
|
||||||
|
ll.CurrentLevel = SecurityLevel
|
||||||
|
case 6:
|
||||||
|
ll.CurrentLevel = WarnLevel
|
||||||
|
case 7:
|
||||||
|
ll.CurrentLevel = ErrorLevel
|
||||||
|
case 8:
|
||||||
|
ll.CurrentLevel = FatalLevel
|
||||||
|
default:
|
||||||
|
ll.CurrentLevel = InfoLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ll LevelLogger) Blank(n int) {
|
||||||
|
outs := " "
|
||||||
|
if n < 1 {
|
||||||
|
n = 1
|
||||||
|
} else if n > 6 {
|
||||||
|
n = 5
|
||||||
|
}
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
outs = outs + "\n"
|
||||||
|
}
|
||||||
|
ll.blankLog.Print(outs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ll LevelLogger) CheckFerr(e error, msg string) {
|
||||||
|
if e != nil {
|
||||||
|
ll.Fatal(e, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
19
types.go
19
types.go
@@ -8,6 +8,7 @@ import (
|
|||||||
// Fatal One or more key business functionalities are not working and the whole system doesn’t fulfill the business functionalities.
|
// Fatal One or more key business functionalities are not working and the whole system doesn’t fulfill the business functionalities.
|
||||||
// Error One or more functionalities are not working, preventing some functionalities from working correctly.
|
// Error One or more functionalities are not working, preventing some functionalities from working correctly.
|
||||||
// Warn Unexpected behavior happened inside the application, but it is continuing its work and the key business features are operating as expected.
|
// Warn Unexpected behavior happened inside the application, but it is continuing its work and the key business features are operating as expected.
|
||||||
|
// Security A violation of the app's security practises
|
||||||
// Info An event happened, the event is purely informative and can be ignored during normal operations.
|
// Info An event happened, the event is purely informative and can be ignored during normal operations.
|
||||||
// Debug A log level used for events considered to be useful during software debugging when more granular information is needed.
|
// Debug A log level used for events considered to be useful during software debugging when more granular information is needed.
|
||||||
// Trace A log level describing events showing step by step execution of your code that can be ignored during the standard operation, but may be useful during extended debugging sessions.
|
// Trace A log level describing events showing step by step execution of your code that can be ignored during the standard operation, but may be useful during extended debugging sessions.
|
||||||
@@ -15,13 +16,15 @@ import (
|
|||||||
type LogLevel int
|
type LogLevel int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Panic LogLevel = iota
|
LevelLoggerOff LogLevel = iota
|
||||||
Trace
|
PanicLevel
|
||||||
Debug
|
TraceLevel
|
||||||
Info
|
DebugLevel
|
||||||
Warn
|
InfoLevel
|
||||||
Error
|
SecurityLevel
|
||||||
Fatal
|
WarnLevel
|
||||||
|
ErrorLevel
|
||||||
|
FatalLevel
|
||||||
)
|
)
|
||||||
|
|
||||||
// type LevelLogger interface {
|
// type LevelLogger interface {
|
||||||
@@ -34,7 +37,9 @@ type LevelLogger struct {
|
|||||||
traceLog *log.Logger
|
traceLog *log.Logger
|
||||||
debugLog *log.Logger
|
debugLog *log.Logger
|
||||||
infoLog *log.Logger
|
infoLog *log.Logger
|
||||||
|
securityLog *log.Logger
|
||||||
warnLog *log.Logger
|
warnLog *log.Logger
|
||||||
errorLog *log.Logger
|
errorLog *log.Logger
|
||||||
fatalLog *log.Logger
|
fatalLog *log.Logger
|
||||||
|
blankLog *log.Logger
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user