logging to independent files
This commit is contained in:
@@ -13,8 +13,6 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
timeFormat = "2006-01-02 15:04:05.000"
|
timeFormat = "2006-01-02 15:04:05.000"
|
||||||
baseOnce sync.Once
|
|
||||||
baseLogger *BaseLogger
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// BaseLogger provides the core logging functionality
|
// BaseLogger provides the core logging functionality
|
||||||
@@ -36,13 +34,9 @@ const (
|
|||||||
LogLevelPanic LogLevel = "PANIC"
|
LogLevelPanic LogLevel = "PANIC"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Initialize creates or gets the singleton base logger instance
|
// Initialize creates a new base logger instance
|
||||||
func InitializeBase(tp string) (*BaseLogger, error) {
|
func InitializeBase(tp string) (*BaseLogger, error) {
|
||||||
var err error
|
return newBaseLogger(tp)
|
||||||
baseOnce.Do(func() {
|
|
||||||
baseLogger, err = newBaseLogger(tp)
|
|
||||||
})
|
|
||||||
return baseLogger, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newBaseLogger(tp string) (*BaseLogger, error) {
|
func newBaseLogger(tp string) (*BaseLogger, error) {
|
||||||
@@ -71,11 +65,9 @@ func newBaseLogger(tp string) (*BaseLogger, error) {
|
|||||||
return logger, nil
|
return logger, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBaseLogger returns the singleton base logger instance
|
// GetBaseLogger creates and returns a new base logger instance
|
||||||
func GetBaseLogger(tp string) *BaseLogger {
|
func GetBaseLogger(tp string) *BaseLogger {
|
||||||
if baseLogger == nil {
|
baseLogger, _ := InitializeBase(tp)
|
||||||
baseLogger, _ = InitializeBase(tp)
|
|
||||||
}
|
|
||||||
return baseLogger
|
return baseLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +150,7 @@ func (bl *BaseLogger) IsInitialized() bool {
|
|||||||
|
|
||||||
// RecoverAndLog recovers from panics and logs them
|
// RecoverAndLog recovers from panics and logs them
|
||||||
func RecoverAndLog() {
|
func RecoverAndLog() {
|
||||||
baseLogger := GetBaseLogger("log")
|
baseLogger := GetBaseLogger("panic")
|
||||||
if baseLogger != nil && baseLogger.IsInitialized() {
|
if baseLogger != nil && baseLogger.IsInitialized() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
// Get stack trace
|
// Get stack trace
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package logging
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DebugLogger handles debug-level logging
|
// DebugLogger handles debug-level logging
|
||||||
@@ -12,8 +13,9 @@ type DebugLogger struct {
|
|||||||
|
|
||||||
// NewDebugLogger creates a new debug logger instance
|
// NewDebugLogger creates a new debug logger instance
|
||||||
func NewDebugLogger() *DebugLogger {
|
func NewDebugLogger() *DebugLogger {
|
||||||
|
base, _ := InitializeBase("debug")
|
||||||
return &DebugLogger{
|
return &DebugLogger{
|
||||||
base: GetBaseLogger("debug"),
|
base: base,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,13 +100,16 @@ func bToKb(b uint64) uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Global debug logger instance
|
// Global debug logger instance
|
||||||
var debugLogger *DebugLogger
|
var (
|
||||||
|
debugLogger *DebugLogger
|
||||||
|
debugOnce sync.Once
|
||||||
|
)
|
||||||
|
|
||||||
// GetDebugLogger returns the global debug logger instance
|
// GetDebugLogger returns the global debug logger instance
|
||||||
func GetDebugLogger() *DebugLogger {
|
func GetDebugLogger() *DebugLogger {
|
||||||
if debugLogger == nil {
|
debugOnce.Do(func() {
|
||||||
debugLogger = NewDebugLogger()
|
debugLogger = NewDebugLogger()
|
||||||
}
|
})
|
||||||
return debugLogger
|
return debugLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package logging
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ErrorLogger handles error-level logging
|
// ErrorLogger handles error-level logging
|
||||||
@@ -12,8 +13,9 @@ type ErrorLogger struct {
|
|||||||
|
|
||||||
// NewErrorLogger creates a new error logger instance
|
// NewErrorLogger creates a new error logger instance
|
||||||
func NewErrorLogger() *ErrorLogger {
|
func NewErrorLogger() *ErrorLogger {
|
||||||
|
base, _ := InitializeBase("error")
|
||||||
return &ErrorLogger{
|
return &ErrorLogger{
|
||||||
base: GetBaseLogger("error"),
|
base: base,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,13 +67,16 @@ func (el *ErrorLogger) LogFatal(format string, v ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Global error logger instance
|
// Global error logger instance
|
||||||
var errorLogger *ErrorLogger
|
var (
|
||||||
|
errorLogger *ErrorLogger
|
||||||
|
errorOnce sync.Once
|
||||||
|
)
|
||||||
|
|
||||||
// GetErrorLogger returns the global error logger instance
|
// GetErrorLogger returns the global error logger instance
|
||||||
func GetErrorLogger() *ErrorLogger {
|
func GetErrorLogger() *ErrorLogger {
|
||||||
if errorLogger == nil {
|
errorOnce.Do(func() {
|
||||||
errorLogger = NewErrorLogger()
|
errorLogger = NewErrorLogger()
|
||||||
}
|
})
|
||||||
return errorLogger
|
return errorLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package logging
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// InfoLogger handles info-level logging
|
// InfoLogger handles info-level logging
|
||||||
@@ -11,8 +12,9 @@ type InfoLogger struct {
|
|||||||
|
|
||||||
// NewInfoLogger creates a new info logger instance
|
// NewInfoLogger creates a new info logger instance
|
||||||
func NewInfoLogger() *InfoLogger {
|
func NewInfoLogger() *InfoLogger {
|
||||||
|
base, _ := InitializeBase("info")
|
||||||
return &InfoLogger{
|
return &InfoLogger{
|
||||||
base: GetBaseLogger("info"),
|
base: base,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,13 +76,16 @@ func (il *InfoLogger) LogResponse(method string, path string, statusCode int, du
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Global info logger instance
|
// Global info logger instance
|
||||||
var infoLogger *InfoLogger
|
var (
|
||||||
|
infoLogger *InfoLogger
|
||||||
|
infoOnce sync.Once
|
||||||
|
)
|
||||||
|
|
||||||
// GetInfoLogger returns the global info logger instance
|
// GetInfoLogger returns the global info logger instance
|
||||||
func GetInfoLogger() *InfoLogger {
|
func GetInfoLogger() *InfoLogger {
|
||||||
if infoLogger == nil {
|
infoOnce.Do(func() {
|
||||||
infoLogger = NewInfoLogger()
|
infoLogger = NewInfoLogger()
|
||||||
}
|
})
|
||||||
return infoLogger
|
return infoLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ func newLogger() (*Logger, error) {
|
|||||||
// Create the legacy logger wrapper
|
// Create the legacy logger wrapper
|
||||||
logger := &Logger{
|
logger := &Logger{
|
||||||
base: baseLogger,
|
base: baseLogger,
|
||||||
errorLogger: NewErrorLogger(),
|
errorLogger: GetErrorLogger(),
|
||||||
warnLogger: NewWarnLogger(),
|
warnLogger: GetWarnLogger(),
|
||||||
infoLogger: NewInfoLogger(),
|
infoLogger: GetInfoLogger(),
|
||||||
debugLogger: NewDebugLogger(),
|
debugLogger: GetDebugLogger(),
|
||||||
}
|
}
|
||||||
|
|
||||||
return logger, nil
|
return logger, nil
|
||||||
@@ -194,18 +194,19 @@ func GetLegacyLogger() *Logger {
|
|||||||
|
|
||||||
// InitializeLogging initializes all logging components
|
// InitializeLogging initializes all logging components
|
||||||
func InitializeLogging() error {
|
func InitializeLogging() error {
|
||||||
// Initialize base logger
|
|
||||||
_, err := InitializeBase("log")
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to initialize base logger: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize legacy logger for backward compatibility
|
// Initialize legacy logger for backward compatibility
|
||||||
_, err = Initialize()
|
_, err := Initialize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to initialize legacy logger: %v", err)
|
return fmt.Errorf("failed to initialize legacy logger: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pre-initialize all logger types to ensure separate log files
|
||||||
|
GetErrorLogger()
|
||||||
|
GetWarnLogger()
|
||||||
|
GetInfoLogger()
|
||||||
|
GetDebugLogger()
|
||||||
|
GetPerformanceLogger()
|
||||||
|
|
||||||
// Log successful initialization
|
// Log successful initialization
|
||||||
Info("Logging system initialized successfully")
|
Info("Logging system initialized successfully")
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package logging
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WarnLogger handles warn-level logging
|
// WarnLogger handles warn-level logging
|
||||||
@@ -11,8 +12,9 @@ type WarnLogger struct {
|
|||||||
|
|
||||||
// NewWarnLogger creates a new warn logger instance
|
// NewWarnLogger creates a new warn logger instance
|
||||||
func NewWarnLogger() *WarnLogger {
|
func NewWarnLogger() *WarnLogger {
|
||||||
|
base, _ := InitializeBase("warn")
|
||||||
return &WarnLogger{
|
return &WarnLogger{
|
||||||
base: GetBaseLogger("warn"),
|
base: base,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,13 +59,16 @@ func (wl *WarnLogger) LogPerformance(operation string, threshold string, actual
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Global warn logger instance
|
// Global warn logger instance
|
||||||
var warnLogger *WarnLogger
|
var (
|
||||||
|
warnLogger *WarnLogger
|
||||||
|
warnOnce sync.Once
|
||||||
|
)
|
||||||
|
|
||||||
// GetWarnLogger returns the global warn logger instance
|
// GetWarnLogger returns the global warn logger instance
|
||||||
func GetWarnLogger() *WarnLogger {
|
func GetWarnLogger() *WarnLogger {
|
||||||
if warnLogger == nil {
|
warnOnce.Do(func() {
|
||||||
warnLogger = NewWarnLogger()
|
warnLogger = NewWarnLogger()
|
||||||
}
|
})
|
||||||
return warnLogger
|
return warnLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user