xamarin - 将 Serilog 与 MvvmCross 结合使用

标签 xamarin logging mvvmcross serilog

我在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 初始化的私有(private)只读 IMvxLog _log。

当我调用 _log.Error("Some error") 时,log.txt 文件中没有写入任何内容。

最佳答案

问题是记录器在您正在测试的设备/模拟器/模拟器的上下文中写入。所以C:\\log.txt意味着它正在尝试写入设备上的该目录。

Android - 文件日志记录

对于 Android,您可以使用外部文件目录,因为它不需要运行时权限,并且可以通过文件浏览或 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 目录。然后您可以访问log.txt在 Mac 上通过模拟器。该位置类似于 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

关于xamarin - 将 Serilog 与 MvvmCross 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47531864/

相关文章:

ios - 从 Storyboard 实例化时,未应用 Interface Builder 中定义的样式元素

ruby - 如何修补 RequestId 中间件或为什么 Heroku 不使用标准的 HTTP_X_REQUEST_ID?

node.js - Winston:多进程日志记录

ios - MonoTouch 异常未在设备上捕获

android - 尝试为 SyncAdapter 查找 ContentProvider 时出错

android - 如何使用 RestSharp、Xamarin Android 发布嵌套 JSON

c# - mvvmcross 的 AOT 问题

flash - Adobe Flash Professional CS5编译错误日志-持续集成/每夜构建

visual-studio - 如何为可移植类库构建目标包?

xamarin - 对于简单到中等复杂度的新项目,我应该选择 MvvmLight 还是 MvvmCross?