actions
Security / scan (1.19.13) (push) Successful in 1m1s
Details
Security / scan (>=1.20) (push) Successful in 49s
Details
Test / uint (1.19.13, ubuntu-latest) (push) Successful in 52s
Details
Test / uint (>=1.20, ubuntu-latest) (push) Successful in 50s
Details
Verify / lint (1.19.13) (push) Successful in 1m40s
Details
Verify / lint (>=1.20) (push) Successful in 1m9s
Details
Security / scan (1.19.13) (push) Successful in 1m1s
Details
Security / scan (>=1.20) (push) Successful in 49s
Details
Test / uint (1.19.13, ubuntu-latest) (push) Successful in 52s
Details
Test / uint (>=1.20, ubuntu-latest) (push) Successful in 50s
Details
Verify / lint (1.19.13) (push) Successful in 1m40s
Details
Verify / lint (>=1.20) (push) Successful in 1m9s
Details
This commit is contained in:
parent
b9045bbd12
commit
4833cbaec1
|
@ -16,7 +16,7 @@ jobs:
|
||||||
scan:
|
scan:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
go: ['>=1.19.8']
|
go: ['1.19.13', '>=1.20']
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
|
@ -16,7 +16,7 @@ jobs:
|
||||||
uint:
|
uint:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
go: ['>=1.19.8']
|
go: ['1.19.13', '>=1.20']
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
|
@ -16,7 +16,7 @@ jobs:
|
||||||
lint:
|
lint:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
go: ['>=1.19.8']
|
go: ['1.19.13', '>=1.20']
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
301
glog.go
301
glog.go
|
@ -1,44 +1,45 @@
|
||||||
package glog
|
package glog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"runtime"
|
"path/filepath"
|
||||||
"sync"
|
"runtime"
|
||||||
"time"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MaskUNKNOWN = 1 << iota
|
MaskUNKNOWN = 1 << iota
|
||||||
MaskDEBUG
|
MaskDEBUG
|
||||||
MaskTRACE
|
MaskTRACE
|
||||||
MaskINFO
|
MaskINFO
|
||||||
MaskWARNING
|
MaskWARNING
|
||||||
MaskERROR
|
MaskERROR
|
||||||
MaskFATAL
|
MaskFATAL
|
||||||
MaskStdMask = MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
|
MaskStdMask = MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
|
||||||
MaskStdAll = MaskUNKNOWN | MaskDEBUG | MaskTRACE | MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
|
MaskStdAll = MaskUNKNOWN | MaskDEBUG | MaskTRACE | MaskINFO | MaskWARNING | MaskERROR | MaskFATAL
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FlagDate = 1 << iota
|
FlagDate = 1 << iota
|
||||||
FlagTime
|
FlagTime
|
||||||
FlagLongFile
|
FlagLongFile
|
||||||
FlagShortFile
|
FlagShortFile
|
||||||
FlagPrefix
|
FlagPrefix
|
||||||
FlagStdFlag = FlagDate | FlagTime | FlagPrefix
|
FlagStdFlag = FlagDate | FlagTime | FlagPrefix
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
prefixUNKNOWN = "[UNKNOWN] "
|
prefixUNKNOWN = "[UNKNOWN] "
|
||||||
prefixDEBUG = "[DEBUG ] "
|
prefixDEBUG = "[DEBUG ] "
|
||||||
prefixTRACE = "[TRACE ] "
|
prefixTRACE = "[TRACE ] "
|
||||||
prefixINFO = "[INFO ] "
|
prefixINFO = "[INFO ] "
|
||||||
prefixWARNING = "[WARNING] "
|
prefixWARNING = "[WARNING] "
|
||||||
prefixERROR = "[ERROR ] "
|
prefixERROR = "[ERROR ] "
|
||||||
prefixFATAL = "[FATAL ] "
|
prefixFATAL = "[FATAL ] "
|
||||||
)
|
)
|
||||||
|
|
||||||
var mask = MaskStdAll
|
var mask = MaskStdAll
|
||||||
|
@ -50,162 +51,162 @@ var file *File
|
||||||
var lock sync.RWMutex
|
var lock sync.RWMutex
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
consoleStdout = new(File)
|
consoleStdout = new(File)
|
||||||
consoleStdout.file = os.Stdout
|
consoleStdout.file = os.Stdout
|
||||||
consoleStderr = new(File)
|
consoleStderr = new(File)
|
||||||
consoleStderr.file = os.Stderr
|
consoleStderr.file = os.Stderr
|
||||||
file = nil
|
file = nil
|
||||||
lock = sync.RWMutex{}
|
lock = sync.RWMutex{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetMask(m int) {
|
func SetMask(m int) {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
mask = m
|
mask = m
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetFlag(f int) {
|
func SetFlag(f int) {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
flag = f
|
flag = f
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetLogFile(path string) error {
|
func SetLogFile(path string) error {
|
||||||
f, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
|
f, err := os.OpenFile(filepath.Clean(path), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
file = new(File)
|
file = new(File)
|
||||||
file.file = f
|
file.file = f
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CloseFile() {
|
func CloseFile() {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file == nil {
|
if file == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err := file.file.Close()
|
err := file.file.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
write(os.Stderr, prefixERROR, "failed to close log file")
|
write(os.Stderr, prefixERROR, "failed to close log file")
|
||||||
}
|
}
|
||||||
file = nil
|
file = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func write(w io.Writer, prefix string, format string, values ...any) {
|
func write(w io.Writer, prefix string, format string, values ...any) {
|
||||||
now := ""
|
now := ""
|
||||||
if (flag&FlagDate) != 0 && (flag&FlagTime) != 0 {
|
if (flag&FlagDate) != 0 && (flag&FlagTime) != 0 {
|
||||||
now = time.Now().Format("2006-01-02 15:04:05 ")
|
now = time.Now().Format("2006-01-02 15:04:05 ")
|
||||||
} else if (flag & FlagDate) != 0 {
|
} else if (flag & FlagDate) != 0 {
|
||||||
now = time.Now().Format("2006-01-02 ")
|
now = time.Now().Format("2006-01-02 ")
|
||||||
} else if (flag & FlagTime) != 0 {
|
} else if (flag & FlagTime) != 0 {
|
||||||
now = time.Now().Format("15:04:05 ")
|
now = time.Now().Format("15:04:05 ")
|
||||||
}
|
}
|
||||||
if (flag & FlagPrefix) != 0 {
|
if (flag & FlagPrefix) != 0 {
|
||||||
_, _ = w.Write([]byte(now))
|
_, _ = w.Write([]byte(now))
|
||||||
_, _ = w.Write([]byte(prefix))
|
_, _ = w.Write([]byte(prefix))
|
||||||
} else {
|
} else {
|
||||||
_, _ = w.Write([]byte(prefix))
|
_, _ = w.Write([]byte(prefix))
|
||||||
_, _ = w.Write([]byte(now))
|
_, _ = w.Write([]byte(now))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag & FlagLongFile) != 0 {
|
if (flag & FlagLongFile) != 0 {
|
||||||
_, p, l, ok := runtime.Caller(2)
|
_, p, l, ok := runtime.Caller(2)
|
||||||
if ok {
|
if ok {
|
||||||
_, _ = fmt.Fprintf(w, "%s:%d ", p, l)
|
_, _ = fmt.Fprintf(w, "%s:%d ", p, l)
|
||||||
} else {
|
} else {
|
||||||
_, _ = w.Write([]byte("?:? "))
|
_, _ = w.Write([]byte("?:? "))
|
||||||
}
|
}
|
||||||
} else if (flag & FlagShortFile) != 0 {
|
} else if (flag & FlagShortFile) != 0 {
|
||||||
_, p, l, ok := runtime.Caller(2)
|
_, p, l, ok := runtime.Caller(2)
|
||||||
if ok {
|
if ok {
|
||||||
_, _ = fmt.Fprintf(w, "%s:%d ", path.Base(p), l)
|
_, _ = fmt.Fprintf(w, "%s:%d ", path.Base(p), l)
|
||||||
} else {
|
} else {
|
||||||
_, _ = w.Write([]byte("?:? "))
|
_, _ = w.Write([]byte("?:? "))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_, _ = w.Write([]byte("| "))
|
_, _ = w.Write([]byte("| "))
|
||||||
_, _ = fmt.Fprintf(w, format, values...)
|
_, _ = fmt.Fprintf(w, format, values...)
|
||||||
_, _ = w.Write([]byte("\n"))
|
_, _ = w.Write([]byte("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func Unknown(format string, values ...any) {
|
func Unknown(format string, values ...any) {
|
||||||
if (mask & MaskUNKNOWN) != 0 {
|
if (mask & MaskUNKNOWN) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixUNKNOWN, format, values...)
|
write(file, prefixUNKNOWN, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStdout, prefixUNKNOWN, format, values...)
|
write(consoleStdout, prefixUNKNOWN, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Debug(format string, values ...any) {
|
func Debug(format string, values ...any) {
|
||||||
if (mask & MaskDEBUG) != 0 {
|
if (mask & MaskDEBUG) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixDEBUG, format, values...)
|
write(file, prefixDEBUG, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStdout, prefixDEBUG, format, values...)
|
write(consoleStdout, prefixDEBUG, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Trace(format string, values ...any) {
|
func Trace(format string, values ...any) {
|
||||||
if (mask & MaskTRACE) != 0 {
|
if (mask & MaskTRACE) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixTRACE, format, values...)
|
write(file, prefixTRACE, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStdout, prefixTRACE, format, values...)
|
write(consoleStdout, prefixTRACE, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Info(format string, values ...any) {
|
func Info(format string, values ...any) {
|
||||||
if (mask & MaskINFO) != 0 {
|
if (mask & MaskINFO) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixINFO, format, values...)
|
write(file, prefixINFO, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStdout, prefixINFO, format, values...)
|
write(consoleStdout, prefixINFO, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Warning(format string, values ...any) {
|
func Warning(format string, values ...any) {
|
||||||
if (mask & MaskWARNING) != 0 {
|
if (mask & MaskWARNING) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixWARNING, format, values...)
|
write(file, prefixWARNING, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStdout, prefixWARNING, format, values...)
|
write(consoleStdout, prefixWARNING, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Error(format string, values ...any) {
|
func Error(format string, values ...any) {
|
||||||
if (mask & MaskERROR) != 0 {
|
if (mask & MaskERROR) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixERROR, format, values...)
|
write(file, prefixERROR, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStderr, prefixERROR, format, values...)
|
write(consoleStderr, prefixERROR, format, values...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Fatal(format string, values ...any) {
|
func Fatal(format string, values ...any) {
|
||||||
if (mask & MaskFATAL) != 0 {
|
if (mask & MaskFATAL) != 0 {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if file != nil {
|
if file != nil {
|
||||||
write(file, prefixFATAL, format, values...)
|
write(file, prefixFATAL, format, values...)
|
||||||
}
|
}
|
||||||
write(consoleStderr, prefixFATAL, format, values...)
|
write(consoleStderr, prefixFATAL, format, values...)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue