【问题标题】:NLog log file on Xamarin - Android issuesXamarin 上的 NLog 日志文件 - Android 问题
【发布时间】:2018-08-07 07:47:36
【问题描述】:

我一直在尝试使用来自 android 的 NLog,它在使用基于控制台的输出时工作。但是,当我尝试以外部存储区域/文件为目标时,什么也没有发生......没有创建日志文件......

我的清单包含以下几行:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我的 Nlog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <targets>
    <target name="logfile" xsi:type="File" fileName="storage\emulated\0\Download\log.txt" />
  </targets>
  <rules>
    <!-- add your logging rules here -->
    <logger name="*" minlevel="Error" writeTo="logfile" />
  </rules>
</nlog>

我的活动 MainActivity.cs :

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Logger sm_logger = LogManager.GetCurrentClassLogger();
        sm_logger.Debug("test output");
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
    }

所有这些代码都运行,似乎没有抛出任何错误,但是也没有创建文件……使用控制台记录器确实会输出到控制台……但是,我们将不胜感激。

注意:

我同时使用模拟器和设备,都没有创建日志文件。

我正在为 api 的 android 7.1 level 25 构建。

NLog.config 文件被捆绑为一个 androidasset,并且似乎可以加载,因为它可以找到目标等

【问题讨论】:

  • 如果在应用程序退出之前添加对NLog.LogManager.Shutdown()的调用会发生什么?你试过 NLog 内部记录器吗?
  • 在测试 LogManager.shutdown 之后,它似乎仍然没有做任何事情,同样,内部记录器也不会在我的本地 C 驱动器上创建文件,正如我在 android 应用程序中使用时所期望的那样......
  • 您是否尝试过通过代码启用内部记录器?请记住,默认情况下,Xamerin Android Linker 将删除未直接引用的任何内容(除非另有说明)。 NLog 通过反射工作,因此很容易被剥离。
  • 我遇到了类似的问题,记录器显然正在工作,因为我可以在 VS 控制台窗口中看到消息,但没有创建文件。在 Android 和 Apple 上发生同样的情况
  • 在进一步查看后,我发现它似乎创建了一个内部记录器,即它存在于应用程序域空间中,但物理上不在磁盘上。我最终使用 serilog 解决了这个问题,并提供了我自己的记录器写入文件实现作为接收器,但是我不确定为什么这是 nlog 的正常行为。

标签: android xamarin xamarin.android nlog


【解决方案1】:

拥有是不够的

&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;

您还需要通过类似的方式请求许可

ActivityCompat.RequestPermissions(Adapter.Activity, new String[] { Manifest.Permission.WriteExternalStorage }, 1234);

(这是不完整的,您还需要处理权限结果,但是那里有很好的资源来说明如何做到这一点)。

这需要创建 NLog FileTarget 之前发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多