1st ver
commit
0bb965325a
|
@ -0,0 +1 @@
|
|||
.idea
|
|
@ -0,0 +1,5 @@
|
|||
#xlog
|
||||
|
||||
This package allows better log control through the application
|
||||
|
||||
Once you set XLOG ENV VAR, either you name each log you want or set it to ALL,
|
|
@ -0,0 +1,105 @@
|
|||
package xlog
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var envLog string
|
||||
var nullLog *log.Logger
|
||||
var all bool
|
||||
var mx sync.Mutex
|
||||
var loggers map[string]*log.Logger
|
||||
|
||||
func init() {
|
||||
envLog = os.Getenv("XLOG")
|
||||
loggers = make(map[string]*log.Logger)
|
||||
logs := strings.Split(envLog, ",")
|
||||
for _, v := range logs {
|
||||
if v == "ALL" {
|
||||
all = true
|
||||
}
|
||||
loggers[v] = log.New(log.Writer(), v, log.Flags())
|
||||
}
|
||||
|
||||
nullLog = log.New(io.Discard, "", 0)
|
||||
}
|
||||
func Logger(n string) *log.Logger {
|
||||
ret, ok := loggers[n]
|
||||
if ok {
|
||||
return ret
|
||||
}
|
||||
if all {
|
||||
mx.Lock()
|
||||
defer mx.Unlock()
|
||||
|
||||
if ok {
|
||||
return ret
|
||||
}
|
||||
ret = log.New(log.Writer(), n+" - ", log.Flags())
|
||||
loggers[n] = ret
|
||||
return ret
|
||||
|
||||
} else {
|
||||
mx.Lock()
|
||||
defer mx.Unlock()
|
||||
loggers[n] = nullLog
|
||||
}
|
||||
|
||||
return nullLog
|
||||
}
|
||||
func Loggers() map[string]bool {
|
||||
ret := make(map[string]bool)
|
||||
for k, v := range loggers {
|
||||
ret[k] = v != nullLog
|
||||
}
|
||||
return ret
|
||||
}
|
||||
func Enable(n string) *log.Logger {
|
||||
ret, ok := loggers[n]
|
||||
if ok {
|
||||
return ret
|
||||
}
|
||||
|
||||
ret = log.New(log.Writer(), n, log.Flags())
|
||||
loggers[n] = ret
|
||||
return ret
|
||||
|
||||
}
|
||||
func Disable(n string) {
|
||||
loggers[n] = nullLog
|
||||
}
|
||||
|
||||
func Log() *log.Logger {
|
||||
return &log.Logger{}
|
||||
}
|
||||
func Debug() *log.Logger {
|
||||
return Logger("debug")
|
||||
}
|
||||
|
||||
func Trace() *log.Logger {
|
||||
return Logger("trace")
|
||||
}
|
||||
|
||||
func Warn() *log.Logger {
|
||||
return Logger("warm")
|
||||
}
|
||||
|
||||
func Fatal() *log.Logger {
|
||||
return Logger("fatal")
|
||||
}
|
||||
|
||||
func Status() string {
|
||||
sb := strings.Builder{}
|
||||
sb.WriteString(fmt.Sprintf("XLOG STATUS:\n"))
|
||||
sb.WriteString(fmt.Sprintf(" LOGGER - ENABLE\n"))
|
||||
for k, v := range Loggers() {
|
||||
sb.WriteString(fmt.Sprintf(" %s - %v\n", k, v))
|
||||
}
|
||||
sb.WriteString(fmt.Sprintf("ALL enabled: %v\n", all))
|
||||
return sb.String()
|
||||
}
|
Loading…
Reference in New Issue