如何在 splat ReactiveUI 中设置日志记录



我需要在reactiveui中启用日志记录。我实现了ILogger接口:

public class Logger : Splat.ILogger
{
    public LogLevel Level { get; private set; }
    public Logger(LogLevel level)
    {
        Level = level;
    }
    public void Write([Localizable(false)] string message, LogLevel logLevel)
    {
        if (logLevel >= Level)
        Serilog.Log.Error(message);
    }
    public void Write(Exception exception, [Localizable(false)] string message, LogLevel logLevel)
    {
    if (logLevel >= Level)
        Serilog.Log.Error(exception, message);
    }
    public void Write([Localizable(false)] string message, [Localizable(false)] Type type, LogLevel logLevel)
    {
    if (logLevel >= Level)
        Serilog.Log.Error(message);
    }
    public void Write(Exception exception, [Localizable(false)] string message, [Localizable(false)] Type type, LogLevel logLevel)
    {
    if (logLevel >= Level)
        Serilog.Log.Error(exception, message);
    }
}

并注册它:

var logger = new Logging.Logger(LogLevel.Info) { };
Locator.CurrentMutable.RegisterConstant(logger, typeof(ILogger));

并尝试像这样使用它:

LogHost.Default.Error("TestTestTest");
this.WhenAnyValue(x => x.IsHierarchical).Log(this, "ClusterableDictionaryValueSelector IsHierarchical exception")
.BindTo(this, x => x.ViewModel.IsHierarchical).DisposeWith(disposables);

但是我找不到日志文件。当我调用LogHost.Default时,没有调用任何方法。怎么了?

我们有一个为Splat制作的预制Serilog记录器。

您应该能够使用

using Splat.Serilog;
// Then in your service locator initialisation
locator.CurrentMutable.UseSerilogWithWrappingFullLogger();

有关更多详细信息,请参阅 https://github.com/reactiveui/splat#serilog。

然后,您只需正常注册记录器即可。

Splat Serilog还支持开箱即用的语义日志记录,而ILogger将剥离该信息。

最新更新