I'm trying to implement my own log provider.
Setup.cs contains:
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;
}
}
It crashes with the ViewModel constructor when IoC try to resolve the dependency.
Error message:
Failed to resolve parameter for parameter log of type IMvxLog when creating eOrder.ViewModel.ActivitiesViewModel
Maybe I don't need to override MvxLogProviderType.None
?
You return the base in CreateLogProvider()
and since you set the GetDefaultLogProviderType
to None
, that will return null
.
The second problem is that you implement IMvxLog
, and not IMvxLogProvider
. Try implementing that one, and return that in the setup instead of the base.
More information can be found at: https://www.mvvmcross.com/documentation/fundamentals/logging#customize-the-log-provider
Not that the custom sample code there is using Serilog, and is accessing the static instance.
protected override IMvxLogProvider CreateLogProvider()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.LiterateConsole()
.WriteTo.AndroidLog()
.CreateLogger();
return base.CreateLogProvider();
}