suffix
Test / uint (1.19.13, ubuntu-latest) (push) Waiting to run Details
Test / uint (>=1.20, ubuntu-latest) (push) Waiting to run Details
Security / scan (1.19.13) (push) Successful in 55s Details
Security / scan (>=1.20) (push) Successful in 45s Details
Verify / lint (1.19.13) (push) Successful in 1m8s Details
Verify / lint (>=1.20) (push) Successful in 1m0s Details

This commit is contained in:
Akvicor 2024-02-15 18:29:31 +08:00
parent 210dcda822
commit 55933a6bd6
2 changed files with 99 additions and 27 deletions

92
glog.go
View File

@ -19,6 +19,7 @@ const (
MaskWARNING
MaskERROR
MaskFATAL
MaskStd = MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
MaskAll = MaskUNKNOWN | MaskDEBUG | MaskTRACE | MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
)
@ -30,20 +31,26 @@ const (
FlagShortFile
FlagFunc
FlagPrefix
FlagSuffix
FlagStd = FlagDate | FlagTime | FlagPrefix
FlagAll = FlagDate | FlagTime | FlagShortFile | FlagFunc | FlagPrefix
FlagAll = FlagDate | FlagTime | FlagShortFile | FlagFunc | FlagPrefix | FlagSuffix
)
var (
prefixUNKNOWN = "[UNKNOWN] "
prefixDEBUG = "[DEBUG ] "
prefixTRACE = "[TRACE ] "
prefixINFO = "[INFO ] "
prefixWARNING = "[WARNING] "
prefixERROR = "[ERROR ] "
prefixFATAL = "[FATAL ] "
prefixUNKNOWN = "[UNKNOWN]"
prefixDEBUG = "[DEBUG ]"
prefixTRACE = "[TRACE ]"
prefixINFO = "[INFO ]"
prefixWARNING = "[WARNING]"
prefixERROR = "[ERROR ]"
prefixFATAL = "[FATAL ]"
)
var separatorStart = " : "
var separatorEnd = " [ "
var separatorEndEnd = " ]"
var mask uint32 = MaskStd
var flag uint32 = FlagStd
@ -51,6 +58,18 @@ var stdout = NewPaperFromFile(os.Stdout)
var stderr = NewPaperFromFile(os.Stderr)
var file = NewPaperFromFile(nil)
func SetSeparatorStart(sep string) {
separatorStart = sep
}
func SetSeparatorEnd(sep string) {
separatorEnd = sep
}
func SetSeparatorEndEnd(end string) {
separatorEndEnd = end
}
func SetMask(m uint32) {
atomic.StoreUint32(&mask, m)
}
@ -107,55 +126,74 @@ func write(w *Paper, prefix string, format string, values ...any) {
if !w.Ready() {
return
}
log := strings.Builder{}
logPrefix := strings.Builder{}
logSuffix := strings.Builder{}
now := ""
flg := GetFlag()
if (flg&FlagDate) != 0 && (flg&FlagTime) != 0 {
now = time.Now().Format("2006-01-02 15:04:05 ")
now = time.Now().Format("2006-01-02 15:04:05")
} else if (flg & FlagDate) != 0 {
now = time.Now().Format("2006-01-02 ")
now = time.Now().Format("2006-01-02")
} else if (flg & FlagTime) != 0 {
now = time.Now().Format("15:04:05 ")
now = time.Now().Format("15:04:05")
}
if (flg & FlagPrefix) != 0 {
log.WriteString(now)
log.WriteString(prefix)
logPrefix.WriteString(now)
logPrefix.WriteByte(' ')
logPrefix.WriteString(prefix)
} else {
log.WriteString(prefix)
log.WriteString(now)
logPrefix.WriteString(prefix)
logPrefix.WriteByte(' ')
logPrefix.WriteString(now)
}
if (flg & FlagFunc) != 0 {
c, _, _, ok := runtime.Caller(2)
if ok {
log.WriteString(runtime.FuncForPC(c).Name())
log.WriteString(" ")
logSuffix.WriteString(runtime.FuncForPC(c).Name())
} else {
log.WriteString("? ")
logSuffix.WriteByte('?')
}
}
if (flg & FlagLongFile) != 0 {
if logSuffix.Len() != 0 {
logSuffix.WriteByte(' ')
}
_, p, l, ok := runtime.Caller(2)
if ok {
log.WriteString(fmt.Sprintf("%s:%d ", p, l))
logSuffix.WriteString(fmt.Sprintf("%s:%d", p, l))
} else {
log.WriteString("?:? ")
logSuffix.WriteString("?:?")
}
} else if (flg & FlagShortFile) != 0 {
if logSuffix.Len() != 0 {
logSuffix.WriteByte(' ')
}
_, p, l, ok := runtime.Caller(2)
if ok {
log.WriteString(fmt.Sprintf("%s:%d ", path.Base(p), l))
logSuffix.WriteString(fmt.Sprintf("%s:%d", path.Base(p), l))
} else {
log.WriteString("?:? ")
logSuffix.WriteString("?:?")
}
}
log.WriteString("| ")
log.WriteString(fmt.Sprintf(format, values...))
log.WriteString("\n")
w.WriteString(log.String())
if (flag & FlagSuffix) != 0 {
logPrefix.WriteString(separatorStart)
logPrefix.WriteString(fmt.Sprintf(format, values...))
logPrefix.WriteString(separatorEnd)
logPrefix.WriteString(logSuffix.String())
logPrefix.WriteString(separatorEndEnd)
} else {
logPrefix.WriteByte(' ')
logPrefix.WriteString(logSuffix.String())
logPrefix.WriteString(separatorStart)
logPrefix.WriteString(fmt.Sprintf(format, values...))
}
logPrefix.WriteByte('\n')
w.WriteString(logPrefix.String())
}
func Unknown(format string, values ...any) {

View File

@ -23,5 +23,39 @@ func TestGlog(t *testing.T) {
Info("test %s", "Info")
Warning("test %s", "Warning")
Error("test %s", "Error")
fmt.Println()
SetFlag(FlagStd | FlagShortFile)
Unknown("test %s", "Unknown")
Debug("test %s", "Debug")
Trace("test %s", "Trace")
Info("test %s", "Info")
Warning("test %s", "Warning")
Error("test %s", "Error")
fmt.Println()
SetFlag(FlagStd | FlagShortFile | FlagSuffix)
Unknown("test %s", "Unknown")
Debug("test %s", "Debug")
Trace("test %s", "Trace")
Info("test %s", "Info")
Warning("test %s", "Warning")
Error("test %s", "Error")
fmt.Println()
SetSeparatorStart(" : ")
SetSeparatorEnd(" [ ")
SetSeparatorEndEnd(" ]")
Unknown("test %s", "Unknown")
Debug("test %s", "Debug")
Trace("test %s", "Trace")
Info("test %s", "Info")
Warning("test %s", "Warning")
Error("test %s", "Error")
fmt.Println()
SetFlag(FlagAll ^ FlagSuffix)
Unknown("test %s", "Unknown")
Debug("test %s", "Debug")
Trace("test %s", "Trace")
Info("test %s", "Info")
Warning("test %s", "Warning")
Error("test %s", "Error")
Fatal("test %s", "Fatal")
}