138 lines
3.1 KiB
Go
138 lines
3.1 KiB
Go
package logger
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Config holds the configuration for the logger
|
|
type Config struct {
|
|
Level string `json:"level" default:"INFO"`
|
|
JSONFormat bool `json:"json_format" default:"false"`
|
|
Service string `json:"service" default:"api-service"`
|
|
}
|
|
|
|
// DefaultConfig returns the default logger configuration
|
|
func DefaultConfig() Config {
|
|
return Config{
|
|
Level: "INFO",
|
|
JSONFormat: false,
|
|
Service: "api-service",
|
|
}
|
|
}
|
|
|
|
// LoadConfigFromEnv loads logger configuration from environment variables
|
|
func LoadConfigFromEnv() Config {
|
|
config := DefaultConfig()
|
|
|
|
// Load log level from environment
|
|
if level := os.Getenv("LOG_LEVEL"); level != "" {
|
|
config.Level = strings.ToUpper(level)
|
|
}
|
|
|
|
// Load JSON format from environment
|
|
if jsonFormat := os.Getenv("LOG_JSON_FORMAT"); jsonFormat != "" {
|
|
if parsed, err := strconv.ParseBool(jsonFormat); err == nil {
|
|
config.JSONFormat = parsed
|
|
}
|
|
}
|
|
|
|
// Load service name from environment
|
|
if service := os.Getenv("LOG_SERVICE_NAME"); service != "" {
|
|
config.Service = service
|
|
}
|
|
|
|
return config
|
|
}
|
|
|
|
// Validate validates the logger configuration
|
|
func (c *Config) Validate() error {
|
|
// Validate log level
|
|
validLevels := map[string]bool{
|
|
"DEBUG": true,
|
|
"INFO": true,
|
|
"WARN": true,
|
|
"ERROR": true,
|
|
"FATAL": true,
|
|
}
|
|
|
|
if !validLevels[c.Level] {
|
|
c.Level = "INFO" // Default to INFO if invalid
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetLogLevel returns the LogLevel from the configuration
|
|
func (c *Config) GetLogLevel() LogLevel {
|
|
switch strings.ToUpper(c.Level) {
|
|
case "DEBUG":
|
|
return DEBUG
|
|
case "WARN":
|
|
return WARN
|
|
case "ERROR":
|
|
return ERROR
|
|
case "FATAL":
|
|
return FATAL
|
|
default:
|
|
return INFO
|
|
}
|
|
}
|
|
|
|
// CreateLoggerFromConfig creates a new logger instance from configuration
|
|
func CreateLoggerFromConfig(cfg Config) *Logger {
|
|
cfg.Validate()
|
|
return NewFromConfig(cfg)
|
|
}
|
|
|
|
// CreateLoggerFromEnv creates a new logger instance from environment variables
|
|
func CreateLoggerFromEnv() *Logger {
|
|
cfg := LoadConfigFromEnv()
|
|
return CreateLoggerFromConfig(cfg)
|
|
}
|
|
|
|
// Environment variable constants
|
|
const (
|
|
EnvLogLevel = "LOG_LEVEL"
|
|
EnvLogJSONFormat = "LOG_JSON_FORMAT"
|
|
EnvLogService = "LOG_SERVICE_NAME"
|
|
)
|
|
|
|
// Service-specific configuration helpers
|
|
|
|
// AuthServiceConfig returns configuration for auth service
|
|
func AuthServiceConfig() Config {
|
|
cfg := LoadConfigFromEnv()
|
|
cfg.Service = "auth-service"
|
|
return cfg
|
|
}
|
|
|
|
// BPJSServiceConfig returns configuration for BPJS service
|
|
func BPJSServiceConfig() Config {
|
|
cfg := LoadConfigFromEnv()
|
|
cfg.Service = "bpjs-service"
|
|
return cfg
|
|
}
|
|
|
|
// RetribusiServiceConfig returns configuration for retribusi service
|
|
func RetribusiServiceConfig() Config {
|
|
cfg := LoadConfigFromEnv()
|
|
cfg.Service = "retribusi-service"
|
|
return cfg
|
|
}
|
|
|
|
// DatabaseServiceConfig returns configuration for database service
|
|
func DatabaseServiceConfig() Config {
|
|
cfg := LoadConfigFromEnv()
|
|
cfg.Service = "database-service"
|
|
return cfg
|
|
}
|
|
|
|
// MiddlewareServiceConfig returns configuration for middleware service
|
|
func MiddlewareServiceConfig() Config {
|
|
cfg := LoadConfigFromEnv()
|
|
cfg.Service = "middleware-service"
|
|
return cfg
|
|
}
|