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", }) }