背景:
最近在做一个跨平台的桌面软件,经过技术选型最终选择了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/
本文完。