В рамках использования более структурированного ведения журналов в Serilog нам необходимо изменить формат вывода журналов, чтобы их можно было легко копировать в формате JSON, где это возможно.
Если я настраиваю базовую службу Worker приложение и зарегистрируйте Serilog:
using System.Text.Json;
namespace LoggingTests;
public class Worker : BackgroundService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _hostApplicationLifetime;
public Worker(ILogger logger, IHostApplicationLifetime hostApplicationLifetime)
{
_logger = logger;
_hostApplicationLifetime = hostApplicationLifetime;
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
var message = new ExampleMessage(
ExampleText: "Test Message",
ExampleNumber: 120,
ExamplePerson: new Person("John", "Smith"),
OtherPeople: [new Person("Another", "Person"), new Person("YetAnother", "Person")]
);
_logger.LogWarning("Example Structured Payload: {@Message}", message);
_logger.LogWarning("Example Structured Payload: {@Message}", JsonSerializer.Serialize(message));
_hostApplicationLifetime.StopApplication();
return Task.CompletedTask;
}
record ExampleMessage(string ExampleText, int ExampleNumber, Person ExamplePerson, IEnumerable OtherPeople);
record Person(string FirstName, string LastName);
}
Последний способ регистрации сообщения не является правильным способом его регистрации, и мы по-прежнему хотим, чтобы свойства были деструктурированы и включены в контекст, однако мне интересно, как форматировать сообщение Я бы добился сериализации объекта как экранированного JSON, как в случае с последним сообщением. Чтобы сравнить их:
Любая помощь приветствуется, существует множество документации по ведению журналов с помощью средства форматирования текста по умолчанию в JSON, но включение экранированного JSON в сообщение JSON, судя по всему, является крайним случаем.
>
В рамках использования более структурированного ведения журналов в Serilog нам необходимо изменить формат вывода журналов, чтобы их можно было легко копировать в формате JSON, где это возможно. Если я настраиваю базовую службу Worker приложение и зарегистрируйте Serilog: [code]builder.Services.AddSerilog(loggerConfig => { loggerConfig .WriteTo.File(new RenderedCompactJsonFormatter(), "output.json"); }); [/code] А затем записать данные двумя разными способами: [code]using System.Text.Json;
namespace LoggingTests;
public class Worker : BackgroundService { private readonly ILogger _logger; private readonly IHostApplicationLifetime _hostApplicationLifetime;
protected override Task ExecuteAsync(CancellationToken stoppingToken) { var message = new ExampleMessage( ExampleText: "Test Message", ExampleNumber: 120, ExamplePerson: new Person("John", "Smith"), OtherPeople: [new Person("Another", "Person"), new Person("YetAnother", "Person")] ); _logger.LogWarning("Example Structured Payload: {@Message}", message); _logger.LogWarning("Example Structured Payload: {@Message}", JsonSerializer.Serialize(message)); _hostApplicationLifetime.StopApplication();
return Task.CompletedTask; }
record ExampleMessage(string ExampleText, int ExampleNumber, Person ExamplePerson, IEnumerable OtherPeople); record Person(string FirstName, string LastName); }
[/code] Последний способ регистрации сообщения не является правильным способом его регистрации, и мы по-прежнему хотим, чтобы свойства были деструктурированы и включены в контекст, однако мне интересно, как форматировать сообщение Я бы добился сериализации объекта как экранированного JSON, как в случае с последним сообщением. Чтобы сравнить их: [code]{ "@t": "2024-04-24T01:28:25.4060384Z", "@m": "Example Structured Payload: ExampleMessage { ExampleText: \"Test Message\", ExampleNumber: 120, ExamplePerson: Person { FirstName: \"John\", LastName: \"Smith\" }, OtherPeople: [Person { FirstName: \"Another\", LastName: \"Person\" }, Person { FirstName: \"YetAnother\", LastName: \"Person\" }] }", "@i": "1227d6a4", "@l": "Warning", "Message": { "ExampleText": "Test Message", "ExampleNumber": 120, "ExamplePerson": { "FirstName": "John", "LastName": "Smith", "$type": "Person" }, "OtherPeople": [ { "FirstName": "Another", "LastName": "Person", "$type": "Person" }, { "FirstName": "YetAnother", "LastName": "Person", "$type": "Person" } ], "$type": "ExampleMessage" }, "SourceContext": "LoggingTests.Worker" } [/code] [code]{ "@t": "2024-04-24T01:28:25.4326606Z", "@m": "Example Structured Payload: \"{\\\"ExampleText\\\":\\\"Test Message\\\",\\\"ExampleNumber\\\":120,\\\"ExamplePerson\\\":{\\\"FirstName\\\":\\\"John\\\",\\\"LastName\\\":\\\"Smith\\\"},\\\"OtherPeople\\\":[{\\\"FirstName\\\":\\\"Another\\\",\\\"LastName\\\":\\\"Person\\\"},{\\\"FirstName\\\":\\\"YetAnother\\\",\\\"LastName\\\":\\\"Person\\\"}]}\"", "@i": "1227d6a4", "@l": "Warning", "Message": "{\"ExampleText\":\"Test Message\",\"ExampleNumber\":120,\"ExamplePerson\":{\"FirstName\":\"John\",\"LastName\":\"Smith\"},\"OtherPeople\":[{\"FirstName\":\"Another\",\"LastName\":\"Person\"},{\"FirstName\":\"YetAnother\",\"LastName\":\"Person\"}]}", "SourceContext": "LoggingTests.Worker" } [/code] В идеальном случае сообщение журнала будет выглядеть так: [code]{ "@t": "2024-04-24T01:28:25.4326606Z", "@m": "Example Structured Payload: \"{\\\"ExampleText\\\":\\\"Test Message\\\",\\\"ExampleNumber\\\":120,\\\"ExamplePerson\\\":{\\\"FirstName\\\":\\\"John\\\",\\\"LastName\\\":\\\"Smith\\\"},\\\"OtherPeople\\\":[{\\\"FirstName\\\":\\\"Another\\\",\\\"LastName\\\":\\\"Person\\\"},{\\\"FirstName\\\":\\\"YetAnother\\\",\\\"LastName\\\":\\\"Person\\\"}]}\"", "@i": "1227d6a4", "@l": "Warning", "Message": { "ExampleText": "Test Message", "ExampleNumber": 120, "ExamplePerson": { "FirstName": "John", "LastName": "Smith", "$type": "Person" }, "OtherPeople": [ { "FirstName": "Another", "LastName": "Person", "$type": "Person" }, { "FirstName": "YetAnother", "LastName": "Person", "$type": "Person" } ], "$type": "ExampleMessage" }, "SourceContext": "LoggingTests.Worker" } [/code] Любая помощь приветствуется, существует множество документации по ведению журналов с помощью средства форматирования текста по умолчанию в JSON, но включение экранированного JSON в сообщение JSON, судя по всему, является крайним случаем. >
Я использую Swift UI для создания расширения живой активности, и мне нужен способ отформатировать минутный отсчет отсчета на основе даты форматированной ISO, который доступен в ContentState, и я хочу, чтобы он только отсчитывался и к целевой дате в...
Здравствуйте, я работаю над проектом для своего задания в колледже. Я использую WordPress и шаблон темы для веб-сайта. все в порядке, пока на странице оформления заказа я не получил ошибку
Предупреждение: преобразование массива в строку в...
У меня возникла проблема с обработкой некоторых данных из CSV-файла с помощью пакета CsvHelper v33 в веб-приложении ASP.NET Core 6. Некоторые примеры, которые я пытался реализовать, были из «Обработка проблемы с двойными кавычками» и «Как...