- Added RedisMessageBus for message distribution using Redis Pub/Sub. - Introduced LocalMessageBus as a no-op implementation for single-server mode. - Created messagebus interface for abstraction of message distribution. - Implemented awareness management methods: SetAwareness, GetAllAwareness, DeleteAwareness, and ClearAllAwareness. - Added logger utility for structured logging with zap. - Refactored SniffYjsClientIDs and MakeYjsDeleteMessage functions for improved readability.
42 lines
963 B
Go
42 lines
963 B
Go
package logger
|
|
|
|
import (
|
|
"os"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
// NewLogger creates a production-grade logger with appropriate configuration
|
|
func NewLogger(isDevelopment bool) (*zap.Logger, error) {
|
|
var config zap.Config
|
|
|
|
if isDevelopment {
|
|
config = zap.NewDevelopmentConfig()
|
|
config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
} else {
|
|
config = zap.NewProductionConfig()
|
|
config.EncoderConfig.TimeKey = "timestamp"
|
|
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
}
|
|
|
|
// Allow DEBUG level in development
|
|
if isDevelopment {
|
|
config.Level = zap.NewAtomicLevelAt(zapcore.DebugLevel)
|
|
}
|
|
|
|
logger, err := config.Build()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return logger, nil
|
|
}
|
|
|
|
// NewLoggerFromEnv creates logger based on environment
|
|
func NewLoggerFromEnv() (*zap.Logger, error) {
|
|
env := os.Getenv("ENVIRONMENT")
|
|
isDev := env == "" || env == "development" || env == "dev"
|
|
return NewLogger(isDev)
|
|
}
|