feat(log): Formatted console logging with file output
This commit is contained in:
@@ -5,7 +5,22 @@ import (
|
||||
)
|
||||
|
||||
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
|
||||
@@ -25,21 +40,22 @@ func main() {
|
||||
traceLogger := masterlog.New(masterlog.LevelTrace)
|
||||
traceLogger.Info("Logger created with LevelTrace")
|
||||
|
||||
// Example 5: Create custom logger with JSON encoder
|
||||
// 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", map[string]interface{}{
|
||||
jsonLogger.Info("JSON formatted log (custom logger)", map[string]interface{}{
|
||||
"key": "value",
|
||||
})
|
||||
|
||||
// Example 6: Create logger with file writer
|
||||
fileLogger := masterlog.New()
|
||||
fileWriter, err := masterlog.NewFileWriter("app.log")
|
||||
if err == nil {
|
||||
fileLogger.AddWriter(fileWriter)
|
||||
defer fileWriter.Close()
|
||||
fileLogger.Info("This will be written to file")
|
||||
}
|
||||
// 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()
|
||||
@@ -58,17 +74,16 @@ func main() {
|
||||
debugLogger.Debug("Debug logger with colors")
|
||||
debugLogger.Trace("This won't be logged")
|
||||
|
||||
// Example 10: Pseudonymization of sensitive data
|
||||
pseudoLogger := masterlog.New()
|
||||
// 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")
|
||||
pseudoLogger.SetPseudonymizer(pseudonymizer)
|
||||
masterlog.SetPseudonymizer(pseudonymizer)
|
||||
|
||||
// Mark fields as sensitive
|
||||
pseudoLogger.AddSensitiveFields("user_id", "email", "ip")
|
||||
// Mark fields as sensitive (on global logger)
|
||||
masterlog.AddSensitiveFields("user_id", "email", "ip")
|
||||
|
||||
// Log with sensitive data - it will be pseudonymized
|
||||
pseudoLogger.Info("User logged in", map[string]interface{}{
|
||||
// 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",
|
||||
@@ -76,7 +91,7 @@ func main() {
|
||||
})
|
||||
|
||||
// Same user_id will produce the same pseudonymized value (deterministic)
|
||||
pseudoLogger.Info("User performed action", map[string]interface{}{
|
||||
masterlog.Info("User performed action", map[string]interface{}{
|
||||
"user_id": 12345, // Same value, same pseudonymized output
|
||||
"action": "purchase",
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user