99 lines
3.4 KiB
Go
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",
|
|
})
|
|
}
|