You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serilog是否支持WinUI 3.0应用?日志无输出问题排查求助

问题排查与解决方法

一、控制台日志不显示的原因及解决

Packaged(MSIX打包)的WinUI 3桌面应用默认不会弹出控制台窗口,因此看不到Serilog的控制台输出,解决方式:

  • 打开打包项目的属性(注意是解决方案里带"Package"后缀的项目,不是WinUI3应用项目)
  • 切换到「调试」标签页,勾选「启用调试控制台」选项
  • 重新启动调试,就能看到控制台日志输出

二、日志文件未生成的原因及解决

MSIX应用运行在沙箱环境中,对文件系统访问有严格限制,直接使用相对路径logs\\myapp.txt会导致无法写入(沙箱不允许访问该路径),需要改用应用的专用可写目录:

  1. 修改日志路径为应用本地存储目录
    修改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");
    }
    
  2. 确保日志写入完成
    在应用退出时需要刷新日志缓冲区,避免日志丢失,在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:39:56