62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
Debug *log.Logger
|
|
Info *log.Logger
|
|
Warn *log.Logger
|
|
Error *log.Logger
|
|
)
|
|
|
|
func init() {
|
|
// Check if DEBUG mode is enabled
|
|
debugEnabled := os.Getenv("DEBUG") == "true"
|
|
|
|
if debugEnabled {
|
|
Debug = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile)
|
|
} else {
|
|
// Discard debug logs in production
|
|
Debug = log.New(io.Discard, "", 0)
|
|
}
|
|
|
|
Info = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
|
|
Warn = log.New(os.Stdout, "WARN: ", log.Ldate|log.Ltime|log.Lshortfile)
|
|
Error = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
|
|
}
|
|
|
|
// Sanitize removes sensitive data from log messages
|
|
// This prevents accidental logging of secrets, tokens, or API keys
|
|
func Sanitize(msg string) string {
|
|
// List of sensitive keywords to redact
|
|
sensitive := []string{"token", "key", "password", "secret", "apikey", "bearer"}
|
|
|
|
lower := strings.ToLower(msg)
|
|
for _, keyword := range sensitive {
|
|
if strings.Contains(lower, keyword) {
|
|
return "[REDACTED - Contains sensitive data]"
|
|
}
|
|
}
|
|
return msg
|
|
}
|
|
|
|
// InfoSafe logs an info message after sanitizing it
|
|
func InfoSafe(format string, v ...interface{}) {
|
|
Info.Printf(Sanitize(format), v...)
|
|
}
|
|
|
|
// WarnSafe logs a warning message after sanitizing it
|
|
func WarnSafe(format string, v ...interface{}) {
|
|
Warn.Printf(Sanitize(format), v...)
|
|
}
|
|
|
|
// ErrorSafe logs an error message after sanitizing it
|
|
func ErrorSafe(format string, v ...interface{}) {
|
|
Error.Printf(Sanitize(format), v...)
|
|
}
|