mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
优化支持自定义logger
This commit is contained in:
69
log/log.go
69
log/log.go
@@ -22,7 +22,10 @@ var LogSize int64
|
|||||||
var LogChannelCap int
|
var LogChannelCap int
|
||||||
var LogPath string
|
var LogPath string
|
||||||
var LogLevel slog.Level = LevelTrace
|
var LogLevel slog.Level = LevelTrace
|
||||||
|
|
||||||
|
|
||||||
var gLogger, _ = NewTextLogger(LevelDebug, "", "",true,LogChannelCap)
|
var gLogger, _ = NewTextLogger(LevelDebug, "", "",true,LogChannelCap)
|
||||||
|
var isSetLogger bool
|
||||||
var memPool = bytespool.NewMemAreaPool()
|
var memPool = bytespool.NewMemAreaPool()
|
||||||
|
|
||||||
// levels
|
// levels
|
||||||
@@ -37,6 +40,21 @@ const (
|
|||||||
LevelFatal = slog.Level(20)
|
LevelFatal = slog.Level(20)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ILogger interface {
|
||||||
|
Trace(msg string, args ...any)
|
||||||
|
Debug(msg string, args ...any)
|
||||||
|
Info(msg string, args ...any)
|
||||||
|
Warning(msg string, args ...any)
|
||||||
|
Error(msg string, args ...any)
|
||||||
|
Stack(msg string, args ...any)
|
||||||
|
Dump(msg string, args ...any)
|
||||||
|
Fatal(msg string, args ...any)
|
||||||
|
|
||||||
|
DoSPrintf(level slog.Level,a []interface{})
|
||||||
|
FormatHeader(buf *Buffer,level slog.Level,calldepth int)
|
||||||
|
Close()
|
||||||
|
}
|
||||||
|
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
Slogger *slog.Logger
|
Slogger *slog.Logger
|
||||||
|
|
||||||
@@ -47,7 +65,6 @@ type Logger struct {
|
|||||||
|
|
||||||
type IoWriter struct {
|
type IoWriter struct {
|
||||||
outFile io.Writer // destination for output
|
outFile io.Writer // destination for output
|
||||||
outConsole io.Writer //os.Stdout
|
|
||||||
writeBytes int64
|
writeBytes int64
|
||||||
logChannel chan []byte
|
logChannel chan []byte
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
@@ -122,8 +139,8 @@ func (iw *IoWriter) Write(p []byte) (n int, err error){
|
|||||||
func (iw *IoWriter) writeIo(p []byte) (n int, err error){
|
func (iw *IoWriter) writeIo(p []byte) (n int, err error){
|
||||||
n,err = iw.writeFile(p)
|
n,err = iw.writeFile(p)
|
||||||
|
|
||||||
if iw.outConsole != nil {
|
if OpenConsole {
|
||||||
n,err = iw.outConsole.Write(p)
|
n,err = os.Stdout.Write(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -217,17 +234,12 @@ func (iw *IoWriter) swichFile() error{
|
|||||||
iw.fileDay = now.Day()
|
iw.fileDay = now.Day()
|
||||||
iw.fileCreateTime = now.Unix()
|
iw.fileCreateTime = now.Unix()
|
||||||
atomic.StoreInt64(&iw.writeBytes,0)
|
atomic.StoreInt64(&iw.writeBytes,0)
|
||||||
if OpenConsole == true {
|
|
||||||
iw.outConsole = os.Stdout
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
iw.outConsole = os.Stdout
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTextLogger(level slog.Level,pathName string,filePrefix string,addSource bool,logChannelCap int) (*Logger,error){
|
func NewTextLogger(level slog.Level,pathName string,filePrefix string,addSource bool,logChannelCap int) (ILogger,error){
|
||||||
var logger Logger
|
var logger Logger
|
||||||
logger.ioWriter.filePath = pathName
|
logger.ioWriter.filePath = pathName
|
||||||
logger.ioWriter.fileprefix = filePrefix
|
logger.ioWriter.fileprefix = filePrefix
|
||||||
@@ -242,7 +254,7 @@ func NewTextLogger(level slog.Level,pathName string,filePrefix string,addSource
|
|||||||
return &logger,nil
|
return &logger,nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewJsonLogger(level slog.Level,pathName string,filePrefix string,addSource bool,logChannelCap int) (*Logger,error){
|
func NewJsonLogger(level slog.Level,pathName string,filePrefix string,addSource bool,logChannelCap int) (ILogger,error){
|
||||||
var logger Logger
|
var logger Logger
|
||||||
logger.ioWriter.filePath = pathName
|
logger.ioWriter.filePath = pathName
|
||||||
logger.ioWriter.fileprefix = filePrefix
|
logger.ioWriter.fileprefix = filePrefix
|
||||||
@@ -296,13 +308,18 @@ func (logger *Logger) Fatal(msg string, args ...any) {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's dangerous to call the method on logging
|
// It's non-thread-safe
|
||||||
func Export(logger *Logger) {
|
func SetLogger(logger ILogger) {
|
||||||
if logger != nil {
|
if logger != nil && isSetLogger == false {
|
||||||
gLogger = logger
|
gLogger = logger
|
||||||
|
isSetLogger = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetLogger() ILogger{
|
||||||
|
return gLogger
|
||||||
|
}
|
||||||
|
|
||||||
func Trace(msg string, args ...any){
|
func Trace(msg string, args ...any){
|
||||||
gLogger.Trace(msg, args...)
|
gLogger.Trace(msg, args...)
|
||||||
}
|
}
|
||||||
@@ -415,7 +432,7 @@ func Group(key string, args ...any) slog.Attr {
|
|||||||
return slog.Group(key, args...)
|
return slog.Group(key, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) doSPrintf(level slog.Level,a []interface{}) {
|
func (logger *Logger) DoSPrintf(level slog.Level,a []interface{}) {
|
||||||
if logger.Slogger.Enabled(context.Background(),level) == false{
|
if logger.Slogger.Enabled(context.Background(),level) == false{
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -425,7 +442,7 @@ func (logger *Logger) doSPrintf(level slog.Level,a []interface{}) {
|
|||||||
|
|
||||||
logger.sBuff.Reset()
|
logger.sBuff.Reset()
|
||||||
|
|
||||||
logger.formatHeader(&logger.sBuff,level,3)
|
logger.FormatHeader(&logger.sBuff,level,3)
|
||||||
|
|
||||||
for _,s := range a {
|
for _,s := range a {
|
||||||
logger.sBuff.AppendString(slog.AnyValue(s).String())
|
logger.sBuff.AppendString(slog.AnyValue(s).String())
|
||||||
@@ -435,46 +452,46 @@ func (logger *Logger) doSPrintf(level slog.Level,a []interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) STrace(a ...interface{}) {
|
func (logger *Logger) STrace(a ...interface{}) {
|
||||||
logger.doSPrintf(LevelTrace,a)
|
logger.DoSPrintf(LevelTrace,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) SDebug(a ...interface{}) {
|
func (logger *Logger) SDebug(a ...interface{}) {
|
||||||
logger.doSPrintf(LevelDebug,a)
|
logger.DoSPrintf(LevelDebug,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) SInfo(a ...interface{}) {
|
func (logger *Logger) SInfo(a ...interface{}) {
|
||||||
logger.doSPrintf(LevelInfo,a)
|
logger.DoSPrintf(LevelInfo,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) SWarning(a ...interface{}) {
|
func (logger *Logger) SWarning(a ...interface{}) {
|
||||||
logger.doSPrintf(LevelWarning,a)
|
logger.DoSPrintf(LevelWarning,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) SError(a ...interface{}) {
|
func (logger *Logger) SError(a ...interface{}) {
|
||||||
logger.doSPrintf(LevelError,a)
|
logger.DoSPrintf(LevelError,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func STrace(a ...interface{}) {
|
func STrace(a ...interface{}) {
|
||||||
gLogger.doSPrintf(LevelTrace,a)
|
gLogger.DoSPrintf(LevelTrace,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SDebug(a ...interface{}) {
|
func SDebug(a ...interface{}) {
|
||||||
gLogger.doSPrintf(LevelDebug,a)
|
gLogger.DoSPrintf(LevelDebug,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SInfo(a ...interface{}) {
|
func SInfo(a ...interface{}) {
|
||||||
gLogger.doSPrintf(LevelInfo,a)
|
gLogger.DoSPrintf(LevelInfo,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SWarning(a ...interface{}) {
|
func SWarning(a ...interface{}) {
|
||||||
gLogger.doSPrintf(LevelWarning,a)
|
gLogger.DoSPrintf(LevelWarning,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SError(a ...interface{}) {
|
func SError(a ...interface{}) {
|
||||||
gLogger.doSPrintf(LevelError,a)
|
gLogger.DoSPrintf(LevelError,a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (logger *Logger) formatHeader(buf *Buffer,level slog.Level,calldepth int) {
|
func (logger *Logger) FormatHeader(buf *Buffer,level slog.Level,calldepth int) {
|
||||||
t := time.Now()
|
t := time.Now()
|
||||||
var file string
|
var file string
|
||||||
var line int
|
var line int
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ func initLog() error {
|
|||||||
fmt.Printf("cannot create log file!\n")
|
fmt.Printf("cannot create log file!\n")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Export(logger)
|
log.SetLogger(logger)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user