Serilog是否支持WinUI 3.0应用?日志无输出问题排查求助
问题排查与解决方法
一、控制台日志不显示的原因及解决
Packaged(MSIX打包)的WinUI 3桌面应用默认不会弹出控制台窗口,因此看不到Serilog的控制台输出,解决方式:
- 打开打包项目的属性(注意是解决方案里带"Package"后缀的项目,不是WinUI3应用项目)
- 切换到「调试」标签页,勾选「启用调试控制台」选项
- 重新启动调试,就能看到控制台日志输出
二、日志文件未生成的原因及解决
MSIX应用运行在沙箱环境中,对文件系统访问有严格限制,直接使用相对路径logs\\myapp.txt会导致无法写入(沙箱不允许访问该路径),需要改用应用的专用可写目录:
- 修改日志路径为应用本地存储目录
修改App.xaml.cs中的Serilog配置代码:using System.IO; using Windows.Storage; public App() { this.InitializeComponent(); // 获取应用本地可写目录 var logDir = Path.Combine(ApplicationData.Current.LocalFolder.Path, "logs"); // 确保目录存在(Serilog的FileSink会自动创建目录,手动创建更稳妥) Directory.CreateDirectory(logDir); Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File(Path.Combine(logDir, "myapp.txt"), rollingInterval: RollingInterval.Day) .CreateLogger(); Log.Information("Application Starting"); } - 确保日志写入完成
在应用退出时需要刷新日志缓冲区,避免日志丢失,在App类中添加退出事件处理:protected override void OnExit(ExitEventArgs e) { Log.CloseAndFlush(); base.OnExit(e); }
三、额外排查点
- 确认NuGet包已正确安装:检查项目文件(.csproj)中是否包含Serilog、Serilog.Sinks.Console、Serilog.Sinks.File的PackageReference
- 检查日志级别:如果后续添加了更低级别的日志(如Debug),需要在LoggerConfiguration中添加
.MinimumLevel.Debug()确保输出 - 查看应用本地存储目录:可以通过
ApplicationData.Current.LocalFolder.Path获取路径,手动前往该目录确认日志文件是否生成,路径通常类似C:\Users\你的用户名\AppData\Local\Packages\应用包名\LocalState\logs
内容的提问来源于stack exchange,提问作者SoftHuman
相关产品推荐
相关产品推荐

