MvvmCross自定义日志提供程序

时间:2017-11-30 12:07:05

标签: c# xamarin logging mvvmcross

我正在尝试实现自己的日志提供程序。

Setup.cs包含:

     protected override MvxLogProviderType GetDefaultLogProviderType() => 
                                           MvxLogProviderType.None;

    protected override IMvxLogProvider CreateLogProvider()
    {
        var logger = new Logger();
        return base.CreateLogProvider();
    }        

Logger.cs

     public class Logger : IMvxLog
    {
      public bool Log(MvxLogLevel logLevel, Func<string> messageFunc, 
      Exception exception = null, params object[] formatParameters)
       {
        var client = new HttpClient();
        var url = new Uri("https://jsonplaceholder.typicode.com/posts/1");
        client.PostAsync(url,null);
        return true;
    }
}

当IoC尝试解决依赖关系时,它会在ViewModel构造函数中崩溃。

错误讯息:     消息=&#34;无法解析IMvxLog类型的参数日志的参数     在创建eOrder.ViewModel.ActivitiesViewModel&#34;

也许我不需要覆盖MvxLogProviderType.None?

1 个答案:

答案 0 :(得分:4)

您在CreateLogProvider()中返回基数,并且由于您将GetDefaultLogProviderType设置为None,因此会返回null

第二个问题是您实施IMvxLog,而不是IMvxLogProvider。尝试实现那个,然后在设置而不是基础中返回。

可在以下网址找到更多信息:https://www.mvvmcross.com/documentation/fundamentals/logging#customize-the-log-provider

不是那里的自定义示例代码使用Serilog,而是访问静态实例。

protected override IMvxLogProvider CreateLogProvider()
{
    Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.LiterateConsole()
                .WriteTo.AndroidLog()
                .CreateLogger();
    return base.CreateLogProvider();
}