登录.net core wpf应用程序

Rom*_*sby 4 c# wpf logging .net-core

我是一个相当新的程序员。我一直在开发 .net core wpf 应用程序,我想添加异常日志记录。我研究了使用 nlogger 和 log4net 登录 .net core 的方法,但所有教程都是特定于 asp.net core 的。有人可以为我指明如何在 .net core 中使用 wpf 应用程序登录的正确方向吗?我想我必须添加一个配置文件,因为 .net core 没有为你实现这个。

Cro*_*der 7

我建议您对记录器和所有其他依赖项使用依赖项注入 (DI)。在 WPF 中,您可以用作Application_Startup注册所有依赖项的“组合根”。

此示例使用 Castle Windsor 进行 DI,但您可以使用您的选择。这里的记录器是 Serilog,但同样,您使用哪个并不重要:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    private async void Application_Startup(object sender, StartupEventArgs e)
    {           

        ILogger log = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .WriteTo.File(path: logFolder, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true)
            .CreateLogger();

        var ioc = new WindsorContainer();

        ioc.Register(Castle.MicroKernel.Registration.Component.For<ILogger>().Instance(log));
        ioc.Register(Castle.MicroKernel.Registration.Component.For<SomeDependency...>().ImplementedBy<SomeDependency Implementation...>());
        ioc.Register(Castle.MicroKernel.Registration.Component.For<SomeDependency...>().ImplementedBy<SomeDependency Implementation...>());

        ioc.Register(Castle.MicroKernel.Registration.Component.For<MainWindow>().ImplementedBy<MainWindow>());
        //... etc.

        var window = ioc.Resolve<MainWindow>();
        window.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

任何需要记录的东西都可以ILogger在构造函数中声明一个,只要 Type 也通过 DI 解析,它就会得到一个实例:

public class SomeClassThatLogs
{
    private readonly ILogger _logger;
    public SomeClassThatLogs(ILogger logger)
    {
        _logger = logger;
    }

}
Run Code Online (Sandbox Code Playgroud)

我不打算将此答案作为有关 DI 的课程,您可能需要研究它,但这是在 WPF 中使用 DI 的一种方法。