Avalonia跨平台应用中使用Serilog

353 阅读1分钟

背景:

最近在做一个跨平台的桌面软件,经过技术选型最终选择了Avalonia11,本文介绍如何在Avalonia应用中添加日志输出。

Avalonia官方文档关于日志记录介绍的很少,见下图。

安装依赖:

Serilog.Sinks.Console

Serilog.Sinks.File

Serilog.Sinks.Debug

配置代码:

App.axaml.cs中OnFrameworkInitializationCompleted()添加如下代码:

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("logs/mirrorFiled.log", rollingInterval: RollingInterval.Day)
.WriteTo.Debug()
.CreateLogger();

// 订阅未处理异常
AppDomain.CurrentDomain.UnhandledException += (s, e) => Log.Write(LogEventLevel.Error, (Exception)e.ExceptionObject, "Unhandled exception");
TaskScheduler.UnobservedTaskException += (s, e) => Log.Write(LogEventLevel.Error, e.Exception, "Unobserved task exception");

desktop.Startup += (s, e) => Log.Information("Application starting up");
desktop.Exit += (s, e) => Log.Information("Application is shutting down");

开始使用:

Log.Information("Received Data: {data}", data);

使用效果:

控制台输出:

输出至本地文件:

tips:

1.Log为静态类,直接使用即可,这点比起Microsoft.Extensions.Logging需要注入ILogger类,我认为还是方便了许多。

2.serilog format不支持匿名{}写法,如Log.Information("Received Data: {}", data);这么写会大括号不会被自动自动替换。

3.最终选择serilog是因为看到Microsoft.Extensions.Logging写入文件也是第三方的实现。

更详细的使用,可参考serilog官网:serilog.net/

本文完。