282 lines
8.0 KiB
Go
282 lines
8.0 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
|
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
|
)
|
|
|
|
const logFieldRequestId = "REQUEST_ID"
|
|
const logFieldExtra = "EXTRA"
|
|
|
|
var bootLogger = logrus.New()
|
|
var cliLogger = logrus.New()
|
|
var defaultLogger = logrus.New()
|
|
var requestLogger = logrus.New()
|
|
var sqlQueryLogger = logrus.New()
|
|
|
|
func init() {
|
|
bootLogger.SetFormatter(&LogFormatter{})
|
|
bootLogger.SetOutput(os.Stdout)
|
|
bootLogger.SetLevel(logrus.InfoLevel)
|
|
|
|
cliLogger.SetFormatter(&LogFormatter{})
|
|
cliLogger.SetOutput(os.Stdout)
|
|
cliLogger.SetLevel(logrus.InfoLevel)
|
|
|
|
defaultLogger.SetFormatter(&LogFormatter{})
|
|
defaultLogger.SetOutput(os.Stdout)
|
|
defaultLogger.SetLevel(logrus.InfoLevel)
|
|
|
|
requestLogger.SetFormatter(&LogFormatter{Prefix: "[REQUEST]", DisableLevel: true})
|
|
requestLogger.SetOutput(os.Stdout)
|
|
requestLogger.SetLevel(logrus.InfoLevel)
|
|
|
|
sqlQueryLogger.SetFormatter(&LogFormatter{Prefix: "[SQLQUERY]", DisableLevel: true})
|
|
sqlQueryLogger.SetOutput(os.Stdout)
|
|
sqlQueryLogger.SetLevel(logrus.InfoLevel)
|
|
}
|
|
|
|
// SetLoggerConfiguration sets the logger according to the config
|
|
func SetLoggerConfiguration(config *settings.Config, isDisableBootLog bool) error {
|
|
var bootWriters []io.Writer
|
|
var defaultWriters []io.Writer
|
|
var requestWriters []io.Writer
|
|
var queryWriters []io.Writer
|
|
|
|
if !isDisableBootLog {
|
|
bootWriters = append(bootWriters, os.Stdout)
|
|
}
|
|
|
|
if config.EnableConsoleLog {
|
|
defaultWriters = append(defaultWriters, os.Stdout)
|
|
requestWriters = append(requestWriters, os.Stdout)
|
|
queryWriters = append(queryWriters, os.Stdout)
|
|
}
|
|
|
|
if config.EnableFileLog {
|
|
defaultWriter, err := NewRotateFileWriter(config.FileLogPath, config.LogFileRotate, int64(config.LogFileMaxSize), config.LogFileMaxDays)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if !isDisableBootLog {
|
|
bootWriters = append(bootWriters, defaultWriter)
|
|
}
|
|
|
|
defaultWriters = append(defaultWriters, defaultWriter)
|
|
|
|
if config.EnableRequestLog {
|
|
if config.RequestFileLogPath != "" && config.RequestFileLogPath != config.FileLogPath {
|
|
requestWriter, err := NewRotateFileWriter(config.RequestFileLogPath, config.LogFileRotate, int64(config.LogFileMaxSize), config.LogFileMaxDays)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
requestWriters = append(requestWriters, requestWriter)
|
|
} else {
|
|
requestWriters = append(requestWriters, defaultWriter)
|
|
}
|
|
}
|
|
|
|
if config.EnableQueryLog {
|
|
if config.QueryFileLogPath != "" && config.QueryFileLogPath != config.FileLogPath {
|
|
queryWriter, err := NewRotateFileWriter(config.QueryFileLogPath, config.LogFileRotate, int64(config.LogFileMaxSize), config.LogFileMaxDays)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
queryWriters = append(queryWriters, queryWriter)
|
|
} else {
|
|
queryWriters = append(queryWriters, defaultWriter)
|
|
}
|
|
}
|
|
}
|
|
|
|
bootMultipleWriter := io.MultiWriter(bootWriters...)
|
|
defaultMultipleWriter := io.MultiWriter(defaultWriters...)
|
|
requestMultipleWriter := io.MultiWriter(requestWriters...)
|
|
queryMultipleWriter := io.MultiWriter(queryWriters...)
|
|
|
|
bootLogger.SetOutput(bootMultipleWriter)
|
|
defaultLogger.SetOutput(defaultMultipleWriter)
|
|
requestLogger.SetOutput(requestMultipleWriter)
|
|
sqlQueryLogger.SetOutput(queryMultipleWriter)
|
|
|
|
if config.LogLevel == settings.LOGLEVEL_DEBUG {
|
|
cliLogger.SetLevel(logrus.DebugLevel)
|
|
bootLogger.SetLevel(logrus.DebugLevel)
|
|
defaultLogger.SetLevel(logrus.DebugLevel)
|
|
} else if config.LogLevel == settings.LOGLEVEL_INFO {
|
|
cliLogger.SetLevel(logrus.InfoLevel)
|
|
bootLogger.SetLevel(logrus.InfoLevel)
|
|
defaultLogger.SetLevel(logrus.InfoLevel)
|
|
} else if config.LogLevel == settings.LOGLEVEL_WARN {
|
|
cliLogger.SetLevel(logrus.WarnLevel)
|
|
bootLogger.SetLevel(logrus.WarnLevel)
|
|
defaultLogger.SetLevel(logrus.WarnLevel)
|
|
} else if config.LogLevel == settings.LOGLEVEL_ERROR {
|
|
cliLogger.SetLevel(logrus.ErrorLevel)
|
|
bootLogger.SetLevel(logrus.ErrorLevel)
|
|
defaultLogger.SetLevel(logrus.ErrorLevel)
|
|
}
|
|
|
|
if !config.EnableRequestLog {
|
|
requestLogger = nil
|
|
}
|
|
|
|
if !config.EnableQueryLog {
|
|
sqlQueryLogger = nil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Debugf logs debug log with custom format
|
|
func Debugf(c core.Context, format string, args ...any) {
|
|
if c == nil {
|
|
defaultLogger.Debug(getFinalLog(format, args...))
|
|
} else {
|
|
defaultLogger.WithField(logFieldRequestId, c.GetContextId()).Debug(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// Infof logs info log with custom format
|
|
func Infof(c core.Context, format string, args ...any) {
|
|
if c == nil {
|
|
defaultLogger.Info(getFinalLog(format, args...))
|
|
} else {
|
|
defaultLogger.WithField(logFieldRequestId, c.GetContextId()).Info(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// Warnf logs warn log with custom format
|
|
func Warnf(c core.Context, format string, args ...any) {
|
|
if c == nil {
|
|
defaultLogger.Warn(getFinalLog(format, args...))
|
|
} else {
|
|
defaultLogger.WithField(logFieldRequestId, c.GetContextId()).Warn(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// Errorf logs error log with custom format
|
|
func Errorf(c core.Context, format string, args ...any) {
|
|
if c == nil {
|
|
defaultLogger.Error(getFinalLog(format, args...))
|
|
} else {
|
|
defaultLogger.WithField(logFieldRequestId, c.GetContextId()).Error(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// ErrorfWithExtra logs error log with custom format and extra info
|
|
func ErrorfWithExtra(c core.Context, extraString string, format string, args ...any) {
|
|
if c == nil {
|
|
defaultLogger.WithField(logFieldExtra, extraString).Error(getFinalLog(format, args...))
|
|
} else {
|
|
defaultLogger.WithField(logFieldRequestId, c.GetContextId()).WithField(logFieldExtra, extraString).Error(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// BootInfof logs boot info log
|
|
func BootInfof(c core.Context, format string, args ...any) {
|
|
if bootLogger != nil {
|
|
if c == nil {
|
|
bootLogger.Info(getFinalLog(format, args...))
|
|
} else {
|
|
bootLogger.WithField(logFieldRequestId, c.GetContextId()).Info(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// BootWarnf logs boot warn log
|
|
func BootWarnf(c core.Context, format string, args ...any) {
|
|
if bootLogger != nil {
|
|
if c == nil {
|
|
bootLogger.Warn(getFinalLog(format, args...))
|
|
} else {
|
|
bootLogger.WithField(logFieldRequestId, c.GetContextId()).Warn(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// BootErrorf logs boot error log
|
|
func BootErrorf(c core.Context, format string, args ...any) {
|
|
if bootLogger != nil {
|
|
if c == nil {
|
|
bootLogger.Error(getFinalLog(format, args...))
|
|
} else {
|
|
bootLogger.WithField(logFieldRequestId, c.GetContextId()).Error(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// CliInfof logs boot info log
|
|
func CliInfof(c core.Context, format string, args ...any) {
|
|
if cliLogger != nil {
|
|
if c == nil {
|
|
cliLogger.Info(getFinalLog(format, args...))
|
|
} else {
|
|
cliLogger.WithField(logFieldRequestId, c.GetContextId()).Info(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// CliWarnf logs boot warn log
|
|
func CliWarnf(c core.Context, format string, args ...any) {
|
|
if cliLogger != nil {
|
|
if c == nil {
|
|
cliLogger.Warn(getFinalLog(format, args...))
|
|
} else {
|
|
cliLogger.WithField(logFieldRequestId, c.GetContextId()).Warn(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// CliErrorf logs boot error log
|
|
func CliErrorf(c core.Context, format string, args ...any) {
|
|
if cliLogger != nil {
|
|
if c == nil {
|
|
cliLogger.Error(getFinalLog(format, args...))
|
|
} else {
|
|
cliLogger.WithField(logFieldRequestId, c.GetContextId()).Error(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
}
|
|
|
|
// Requestf logs http request log with custom format
|
|
func Requestf(c core.Context, format string, args ...any) {
|
|
if requestLogger != nil {
|
|
requestLogger.WithField(logFieldRequestId, c.GetContextId()).Info(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
// SqlQuery logs sql query log
|
|
func SqlQuery(args ...any) {
|
|
if sqlQueryLogger != nil {
|
|
sqlQueryLogger.Info(args...)
|
|
}
|
|
}
|
|
|
|
// SqlQueryf logs sql query log with custom format
|
|
func SqlQueryf(format string, args ...any) {
|
|
if sqlQueryLogger != nil {
|
|
sqlQueryLogger.Info(getFinalLog(format, args...))
|
|
}
|
|
}
|
|
|
|
func getFinalLog(format string, args ...any) string {
|
|
result := fmt.Sprintf(format, args...)
|
|
result = strings.Replace(result, "\n", " ", -1)
|
|
|
|
return result
|
|
}
|