使用Serilog与MvvmCross

4

我在 Setup.cs 文件中有这段代码

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

      protected override IMvxLogProvider CreateLogProvider()
      {
          Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .WriteTo.Logger(config => config
                .MinimumLevel.Verbose()
                .WriteTo.File("C:\\log.txt"))
            .CreateLogger();
        return base.CreateLogProvider();
    }

在ViewModel中,我有一个通过IoC初始化的私有IMvxLog _log。当我调用_log.Error("Some error")时,log.txt文件中没有任何内容被写入。
1个回答

5
问题在于记录器是在你正在测试的设备/模拟器/仿真器上下文中写入的。因此,C:\\log.txt 将意味着它正在尝试在设备上写入该目录。
安卓——文件记录
对于安卓,您可以利用外部文件目录,因为它不需要运行时权限,并且可以通过文件浏览器或adb轻松访问。位置类似于 <storage_root>\Android\data\<App_Name>\files
protected override IMvxLogProvider CreateLogProvider()
{
    var externalFolder = Application.Context.GetExternalFilesDir(null).AbsolutePath;
    var path = Path.Combine(externalFolder, "log.txt");

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.Logger(config => config
            .MinimumLevel.Verbose()
            .WriteTo.File(path))
        .CreateLogger();
    return base.CreateLogProvider();
}

Android_serilog

iOS - 文件记录

对于iOS,您可以使用应用程序的MyDocument目录。然后,可以通过模拟器在Mac上访问log.txt。位置应该类似于Library/Developer/CoreSimulator/Devices/<device_id>/data/Containers/Data/Application/<app_id>/Documents

protected override IMvxLogProvider CreateLogProvider()
{
    var docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var path = Path.Combine(docFolder, "log.txt");

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.Logger(config => config
            .MinimumLevel.Verbose()
            .WriteTo.File(path))
        .CreateLogger();
    return base.CreateLogProvider();
}

iOS serilog


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接