全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C# Avalonia怎么记录程序日志 Avalonia集成Serilog

在Avalonia中集成Serilog需先安装Serilog及相关Sink包,再于AppBuilder中注册ILogger服务,并在ViewModel等类中构造注入使用;注意日志目录创建、级别过滤及关闭时调用CloseAndFlush。

在 Avalonia 应用中集成 Serilog 记录日志,核心是将 Serilog 初始化并注入到 Avalonia 的依赖注入容器中,同时确保日志能正确输出到文件、控制台或其它目标。下面分几步说明怎么稳妥集成。

安装必要 NuGet 包

你需要至少以下三个包(以 .NET 6/7/8 和 Avalonia 11+ 为例):

  • Serilog(基础库)
  • Serilog.Sinks.Console(控制台输出)
  • Serilog.Sinks.File(文件输出,推荐用 Serilog.Sinks.Async 包裹提升性能)

可通过包管理器命令安装:

Install-Package Serilog
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File
Install-Package Serilog.Sinks.Async

在 AppBuilder 中配置 Serilog

Avalonia 启动时通过 AppBuilder 注册服务,Serilog 的 ILogger 需在此阶段初始化并添加进 DI 容器。推荐在 Program.csApp.xaml.cs 的启动逻辑里做:

示例(Program.cs):

using Serilog;

public static class Program
{
  [STAThread]
  public static void Main(string[] args)
  {
    // 先创建全局 Logger 实例(可选,但方便全局使用)
    Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Debug()
      .WriteTo.Async(a => a.Console())
      .WriteTo.Async(a => a.File("logs/log-.txt", rollingInterval: RollingInterval.Day))
      .CreateLogger();

    BuildAvaloniaApp()
      .StartWithClassicDesktopLifetime(args);
  }

  public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure()
    .UsePlatformDetect()
    .LogToDebug()
    .UseAppHost()
    // 关键:注册 Serilog ILogger,供 ViewModel 等类构造注入
    .ConfigureServices(services =>
    {
      services.AddSingleton(sp => Log.Logger);
    });
}

在 ViewModel 或窗口中使用 ILogger

只要类是通过 Avalonia DI 创建的(如通过 DataContext 绑定的 ViewModel),就可以直接在构造函数中注入 ILogger

public partial class MainWindowViewModel : ViewModelBase
{
  private readonly ILogger _logger;

  public MainWindowViewModel(ILogger logger)
  {
    _logger = logger;
    _logger.Information("MainWindowViewModel 已创建");
  }

  public void OnButtonClick()
  {
    _logger.Warning("用户点击了按钮");
  }
}

补充建议和注意事项

  • 日志路径如 logs/ 目录需存在,否则文件写入会失败;可在启动时用 Directory.CreateDirectory("logs") 确保
  • 若想按级别过滤(如 Debug 日志只写文件、Info+ 写控制台),可用 Filter.ByExcluding 或多个 WriteTo 配置不同最小级别
  • 避免在 Log.Logger 初始化前调用日志(比如静态字段初始化里),否则会触发 NullReferenceException
  • 关闭应用前建议调用 Log.CloseAndFlush()(可在 App.OnFrameworkInitializationCompleted 或主窗口关闭事件中执行)

基本上就这些。Serilog 和 Avalonia 搭配很自然,关键是把 Logger 实例正确注入生命周期,后续使用就跟标准 .NET 一样简洁。


# app  # ai  # win  # c#  # .net  # Static  # String  # 构造函数  # Directory  # Filter  # void  # using  # class  # public  # private  # console  # 事件  # 可在  # 多个  # 在此  # 并在  # 可选  # 为例  # 管理器  # 几步  # 可通过  # 或其它 


相关文章: 小说建站VPS选用指南:性能对比、配置优化与建站方案解析  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  淘宝制作网站有哪些,淘宝网官网主页?  Android滚轮选择时间控件使用详解  如何获取免费开源的自助建站系统源码?  建站主机SSH密钥生成步骤及常见问题解答?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  网站制作软件有哪些,制图软件有哪些?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在阿里云ECS服务器部署织梦CMS网站?  如何规划企业建站流程的关键步骤?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  山东云建站价格为何差异显著?  如何选择建站程序?包含哪些必备功能与类型?  大型企业网站制作流程,做网站需要注册公司吗?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何通过服务器快速搭建网站?完整步骤解析  ppt制作免费网站有哪些,ppt模板免费下载网站?  海南网站制作公司有哪些,海口网是哪家的?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  python的本地网站制作,如何创建本地站点?  h5在线制作网站电脑版下载,h5网页制作软件?  如何获取上海专业网站定制建站电话?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何将凡科建站内容保存为本地文件?  如何通过VPS建站实现广告与增值服务盈利?  制作证书网站有哪些,全国城建培训中心证书查询官网?  香港网站服务器数量如何影响SEO优化效果?  如何在阿里云完成域名注册与建站?  已有域名和空间如何搭建网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何在阿里云虚拟主机上快速搭建个人网站?  如何在IIS中配置站点IP、端口及主机头?  高端网站建设与定制开发一站式解决方案 中企动力  如何选择网络建站服务器?高效建站必看指南  广州建站公司哪家好?十大优质服务商推荐  成都网站制作公司哪家好,四川省职工服务网是做什么用?  建站之星如何优化SEO以实现高效排名?  建站之星2.7模板快速切换与批量管理功能操作指南  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何快速搭建高效WAP手机网站?  如何快速搭建FTP站点实现文件共享?  如何快速搭建自助建站会员专属系统?  免费视频制作网站,更新又快又好的免费电影网站?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。