使用 Serilog for .NET 将日志写入 Excel 文件

Apo*_*orv 5 c# wpf logging serilog

我已经logging在我的 WPF 应用程序中使用Serilog. 我希望生成的输出具有Excel格式。我希望该excel文件具有column headers如下所述的这些内容,以便我可以sort通过应用filters.

date time| logtype |environment| app build version | test case description | status
Run Code Online (Sandbox Code Playgroud)

示例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
Run Code Online (Sandbox Code Playgroud)

我有以下logging配置

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

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" />
Run Code Online (Sandbox Code Playgroud)

目前,logger正在写入txt不具有上述格式的文件。如何确保完成上述任务?

Fru*_*erg 3

最简单的解决方案是将数据记录为 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();
}
Run Code Online (Sandbox Code Playgroud)

要编写标头,您可以使用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();
Run Code Online (Sandbox Code Playgroud)