using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace ZB.MOM.WW.MxGateway.Worker.Bootstrap; public sealed class WorkerConsoleLogger : IWorkerLogger { private readonly TextWriter _writer; /// Initializes a new worker console logger. /// Text writer destination for log output. public WorkerConsoleLogger(TextWriter writer) { _writer = writer ?? throw new ArgumentNullException(nameof(writer)); } /// Writes an informational log entry. /// Name of the event being logged. /// Event fields and values to log. public void Information(string eventName, IReadOnlyDictionary fields) { Write("Information", eventName, fields); } /// Writes an error log entry. /// Name of the event being logged. /// Event fields and values to log. public void Error(string eventName, IReadOnlyDictionary fields) { Write("Error", eventName, fields); } private void Write( string level, string eventName, IReadOnlyDictionary fields) { Dictionary redactedFields = WorkerLogRedactor.RedactFields(fields); string fieldText = string.Join( " ", redactedFields.Select(field => $"{field.Key}={FormatValue(field.Value)}")); _writer.WriteLine($"level={level} event={eventName} {fieldText}".TrimEnd()); } private static string FormatValue(object? value) { return value?.ToString() ?? string.Empty; } }