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 容器,但我做不到。会怎样?
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