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

This commit is contained in:
Akvicor 2024-01-24 00:15:07 +08:00
parent b9045bbd12
commit 4833cbaec1
4 changed files with 155 additions and 154 deletions

View File

@ -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:

View File

@ -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 }}

View File

@ -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:

303
glog.go
View File

@ -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)
} }
} }