Запись логов в файл Excel с использованием Serilog для. NET - PullRequest
2 голосов
/ 02 апреля 2020

Я реализовал logging в своем приложении WPF, используя Serilog. Я хочу, чтобы вывод генерировался в формате Excel. Я хочу, чтобы файл excel имел эти column headers, как указано ниже, чтобы я мог sort, применяя filters.

date time| logtype |environment| app build version | test case description | status

Образец output должен выглядеть следующим образом

date time       | logtype    |environment| app build version| test case description | status
02-04-2020 4:30 | Test Reults|aBC06      |2.0.150           | Loading Views         | Success

У меня есть следующая logging конфигурация

 public class LoggerFactory : ILoggerFactory
    {
        public Serilog.Core.Logger Create()
        {
            var logger = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();
            return logger;
        }
    }

У AppSettings есть это конфигурация

<add key="serilog:using:Seq" value="Serilog.Sinks.Seq" />
    <add key="serilog:using:RollingFile" value="Serilog.Sinks.RollingFile" />
    <add key="serilog:write-to:RollingFile.pathFormat" value="C:\Dev\Logs\abc-ui-automation-{Date}.txt" />
    <add key="serilog:write-to:RollingFile.retainedFileCountLimit" value="10" />
    <add key="serilog:write-to:Seq.serverUrl" value="http://localhost:5341" />

В настоящее время logger записывает в файл txt без формата, упомянутого выше. Как я могу обеспечить выполнение поставленной задачи?

1 Ответ

2 голосов
/ 02 апреля 2020

Простейшим решением было бы зарегистрировать данные в формате CSV и впоследствии открыть их в Excel. Поэтому вы можете просто реализовать свою собственную версию ITextFormatter . Проверьте реализации по умолчанию, такие как RawFormatter , чтобы увидеть, как.

Вам нужно только написать свою собственную реализацию, например

public void Format(LogEvent logEvent, TextWriter output)
{
    output.write(logEvent.Timestamp.ToString("dd-MM-yyyy H:mm");
    output.write(";");
    output.write(logEvent.Level);
    output.write(";");
    output.write(logEvent.Properties["KEY"]);
    output.write(";");
    //...
    output.WriteLine();
}

Чтобы написать заголовок, вы можете использовать пакет Serilog.Sinks.File.Header . В основном это можно сделать как

Func<string> headerFactory = () => "date time;logtype;...";

Log.Logger = new LoggerConfiguration()
    .WriteTo.File(new YourCsvFormatter(), "log.csv", hooks: new HeaderWriter(headerFactory))
    .CreateLogger();
...