【发布时间】: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