How to use a custom Logger class across multiple classes in a WPF application with Caliburn.Micro and AutoFac?

问题描述 投票:0回答:1
Logger.cs
using Serilog;
using System;
using System.IO;

namespace WpfUI.Utilities.Logging
{
    public class Logger
    {
        private readonly ILogger _logger;
        public Logger()
        {
            _logger = new LoggerConfiguration()
                .WriteTo.File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs", "log.txt"),
                    outputTemplate: "{Timestamp:yyyy-MM-dd} [{Level:u3}] {Message:lj}{NewLine}{Exception}").CreateLogger();
        }

        public void LogInformation(string message)
        {
            // Ex. "'MyFunc' called"
            _logger.Information(" {message} at {time: HH:mm:ss}.",message, DateTime.Now);
        }

        public void LogException(Exception ex)
        {
            _logger.Error("Exception occurred at {time: HH:mm:ss}. Error Message : {ErrorMessage}",DateTime.Now,ex.Message);
        }
    }
}

在我的 WPF 应用程序中,我创建了一个 Logger 类,我通过将其实例化为

private Logger _logger; _logger = new Logger();
来使用它。它有效,但我不能在其他类中使用记录器。我正在使用 Caliburn.Micro 框架,当我在 Bootstrapper 的构造函数中声明 Logger 类时,它不适用于我的其他 ViewModels。

我尝试使用 SimpleContainer 但似乎 SimpleContainer 不支持 Logger 类。 我想使用 AutoFac 容器,但我做不到。会怎样?

c# wpf logging autofac caliburn.micro
1个回答
0
投票

Caliburn 包含一些用于日志记录的指令, 您必须使用 caliburn 中包含的接口

ILog
并将您的记录器绑定到静态变量
LogManager
:

public class Logger : ILog

然后在引导程序中你必须像这样初始化记录器:

public class Bootstrapper : BootstrapperBase
{
    static Bootstrapper()
    {
        LogManager.GetLog = type => new Logger(type);
    }
    :
    :

最后在课堂上你想使用记录器:

public class MainViewModel : Screen
{
    private readonly ILog log = LogManager.GetLog(typeof(MainViewModel));
    public MainViewModel()
    {
        log.LogInformation("test");
    }
}

如果你正在使用 Serilog,你可以看到这个serilog 和 caliburn

© www.soinside.com 2019 - 2024. All rights reserved.