Как настроить логирование в 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, метод не вызывается. Что случилось?


person Igor. A    schedule 16.07.2019    source источник
comment
Почему бы не использовать готовый регистратор Serilog, который мы сделали для ReactiveUI? github.com/reactiveui/splat#serilog   -  person Glenn Watson    schedule 16.07.2019


Ответы (1)


У нас есть готовый регистратор Serilog, созданный для Splat.

Вы должны иметь возможность зарегистрировать его, используя

using Splat.Serilog;

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

Дополнительные сведения см. на странице https://github.com/reactiveui/splat#serilog.

Затем вы просто зарегистрируете регистратор как обычно.

Splat Serilog также поддерживает семантическое ведение журнала «из коробки», в то время как ILogger удаляет эту информацию.

person Glenn Watson    schedule 16.07.2019
comment
Работает, но как это включить: csharp this.WhenAnyValue(x => x.IsHierarchical).Log(this, "ClusterableDictionaryValueSelector IsHierarchical exception") .BindTo(this, x => x.ViewModel.IsHierarchical).DisposeWith(disposables); - person Igor. A; 16.07.2019
comment
Спасибо, это работает. LoggedCatch вызовет ошибку в ReactiveUI, верно? - person Igor. A; 16.07.2019
comment
Будет захватывать любые исключения, переданные в ваш наблюдаемый поток, регистрировать их, а также позволит вам передать их в новом потоке. - person Glenn Watson; 16.07.2019