Files
masterlog/example/main.go
2025-11-10 05:25:29 +01:00

99 lines
3.4 KiB
Go

package main
import (
"git.secnex.io/secnex/masterlog"
)
func main() {
// Example 0: Configure global logger once at startup
// Add file writer to global logger
fileWriter, err := masterlog.NewFileWriter("app.log")
if err == nil {
masterlog.AddWriter(fileWriter)
defer fileWriter.Close()
}
// Add JSON encoder to global logger
masterlog.AddEncoder(&masterlog.JSONEncoder{})
// Set log level for global logger
masterlog.SetLevel(masterlog.LevelDebug)
// Example 1: Simple formatted logging to console (with colors if terminal)
// Now uses the configured global logger (writes to console, file, and JSON)
masterlog.Info("Hello, World!")
// Example 2: Logging with fields
masterlog.Info("User logged in", map[string]interface{}{
"user_id": 12345,
"ip": "192.168.1.1",
})
// Example 3: Different log levels (colored output)
masterlog.Trace("trace message")
masterlog.Debug("debug message")
masterlog.Info("info message")
masterlog.Warn("warning message")
masterlog.Error("error message")
// Example 4: Create logger with specific log level
traceLogger := masterlog.New(masterlog.LevelTrace)
traceLogger.Info("Logger created with LevelTrace")
// Example 5: JSON encoder is already added to global logger in Example 0
// Here's how you'd use it with a custom logger if needed:
jsonLogger := masterlog.New()
jsonLogger.AddEncoder(&masterlog.JSONEncoder{})
jsonLogger.Info("JSON formatted log (custom logger)", map[string]interface{}{
"key": "value",
})
// Example 6: Add file writer to global logger (already configured above)
// Note: The fileWriter was already added in Example 0, but here's how you'd do it separately
// fileWriter, err := masterlog.NewFileWriter("app.log")
// if err == nil {
// masterlog.AddWriter(fileWriter)
// defer fileWriter.Close()
// }
masterlog.Info("This will be written to console, file, and JSON (all configured globally)")
// Example 7: Logger with multiple encoders (formatted + JSON)
multiLogger := masterlog.New()
multiLogger.AddEncoder(&masterlog.JSONEncoder{})
multiLogger.Info("This will be logged in both formats", map[string]interface{}{
"key": "value",
})
// Example 8: Set log level dynamically
masterlog.SetLevel(masterlog.LevelDebug)
masterlog.Trace("This won't be logged (level too low)")
masterlog.Debug("This will be logged")
// Example 9: Create logger with custom level and colored output
debugLogger := masterlog.New(masterlog.LevelDebug)
debugLogger.Debug("Debug logger with colors")
debugLogger.Trace("This won't be logged")
// Example 10: Pseudonymization of sensitive data using global logger
// Create a pseudonymizer with a secret (in production, use a secure secret from config/env)
pseudonymizer := masterlog.NewPseudonymizerFromString("my-secret-key-change-in-production")
masterlog.SetPseudonymizer(pseudonymizer)
// Mark fields as sensitive (on global logger)
masterlog.AddSensitiveFields("user_id", "email", "ip")
// Log with sensitive data - it will be pseudonymized (using global logger)
masterlog.Info("User logged in", map[string]interface{}{
"user_id": 12345,
"email": "user@example.com",
"ip": "192.168.1.1",
"action": "login", // This field is not sensitive, so it won't be pseudonymized
})
// Same user_id will produce the same pseudonymized value (deterministic)
masterlog.Info("User performed action", map[string]interface{}{
"user_id": 12345, // Same value, same pseudonymized output
"action": "purchase",
})
}