При записи сереализованных данных в логгер выводит (null)
Пишу реализацию логгера которая будет добавлять некоторую доп информацию в конечный лог, но сталкиваюсь с проблемой.
Сначала сам код реализации логгера:
public class Enchancer<T>(ILoggerFactory loggerFactory, IContext context) : ILogger<T>
{
private readonly ILogger _logger = loggerFactory.CreateLogger(typeof(T).FullName ?? typeof(T).Name) ??
throw new ArgumentNullException(nameof(loggerFactory), "Logger cannot be null");
public IDisposable BeginScope<TState>(TState state) where TState : notnull => _logger.BeginScope(state)!;
public bool IsEnabled(LogLevel logLevel) => _logger.IsEnabled(logLevel);
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception, string> formatter)
{
string? formatedData = "Дополнительные данные: ";
if (context.Additional is not null)
formatedData += JsonConvert.SerializeObject(context.Additional);
var newState = $"Context Id: {context.ContextId}";
Console.WriteLine($"Hello from enc, it's formated data: {formatedData}");
if (formatedData is not null)
newState += $"\n{formatedData}";
newState += $"\n{state}";
_logger.Log(logLevel, eventId, newState, exception, formatter);
}
}
public class Context : IContext
{
public string ContextId { get; set; } = "None";
public object? Additional { get; set; }
}
Ничего необычного для меня тут нет, все должно работать как и ожидается, но если я в сообщение лога добавляю formatedData, то в логгере данные будут показаны как (null).
Но, при выводе этих же данные через Console.WriteLine() все будет показано в нужном формате.
Вывод консоли:
info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7209
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5202
info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\Stewi\source\repos\api\webapi Hello from enc, it's formated data: Дополнительные данные: {"Name":"Yan","Username":"air2921"}
info: webapi.Controllers.TestController[0] Context Id: 99c2b2f9-dff3-406c-ba82-e5823705f347 Дополнительные данные: (null) <Тут оригинальная запись лога>