【问题标题】:Setup.cs does not setup Serilog in MvvmCross WPFSetup.cs 没有在 MvvmCross WPF 中设置 Serilog
【发布时间】:2021-01-25 20:11:49
【问题描述】:

我正在使用 MvvmCross 7 和 WPF Core,我正在尝试使用 Serilog 作为记录器,但我必须遗漏一些东西。 我正在关注官方指南https://www.mvvmcross.com/documentation/fundamentals/logging,这是我的 setup.cs:

       public Setup(Dispatcher uiThreadDispatcher, IMvxWpfViewPresenter presenter)
    : base(uiThreadDispatcher, presenter)
        {
        }
        protected override IMvxApplication CreateApp()
        {

            return (IMvxApplication)new ReHUB.Core.App();
        }

        protected override MvxLogProviderType GetDefaultLogProviderType()
        {

            return MvxLogProviderType.Serilog;
        }

        protected override IMvxLogProvider CreateLogProvider()
        {

            string path = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "my_log.txt");

            Log.Logger = new LoggerConfiguration()
              .MinimumLevel.Debug()
              .Enrich.FromLogContext()
                      .WriteTo.Logger(config => config
            .MinimumLevel.Verbose()
            .WriteTo.File(path))
            .WriteTo.File(path,
                  rollingInterval: RollingInterval.Day,
                  outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss zzz} {myCustomVar} [{Level:u3}] {Message:lj}")
              .CreateLogger();
            return base.CreateLogProvider();
        }

哪个运行没有错误。

我的第一个困惑是 setup.cs 还没有在我的项目中,所以我必须手动创建它,我的第二个困惑是如果我在其中打印它不会被打印,所以我不确定是否setup.cs 正在执行(我猜不是)。

然后我将它注入到我的视图模型的构造函数中

IMvxLog logger

并将其称为

Log.Logger.Error("Mandrone");

但它不会在我的 my_log.txt 中记录任何内容。

我错过了什么?我的第一个线索是 setup.cs 自 MvvmCross 7 以来发生了一些变化,但我在互联网上找不到答案。

【问题讨论】:

    标签: c# wpf mvvmcross serilog


    【解决方案1】:

    我有类似的问题。我找到的解决方案是在 App.xaml.cs 中添加该行:

    MvxWpfSetupSingleton.EnsureSingletonAvailable(Dispatcher, MainWindow);
    

    这将触发 Setup.cs 并创建一个记录器。

    您可以在这里找到更多信息:MvvmCross 7 How to setup Serilog in WPF (.net Core 3.1) application

    【讨论】:

    • 谢谢!很高兴看到有人使用 mvvmcross 和 WPF!我尝试将那行代码放在“this.RegisterSetupType>();”之后在 App.xaml.cs 但我的 setup.cs 不会被执行并且记录器不会设置。你做了别的事情吗?
    • 问题是您必须在注册设置之前放置它。因此,EnsureSingletonAvailable 方法先执行,然后是 RegisterSetupType。颠倒顺序,应该可以。
    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多