Xamarin Android 上的 NLog 日志文件存储在哪里?

Where to store NLog log files on Xamarin Android?

tutorial 中,我按照一些步骤将 NLog 集成到我们的 Xamarin(非 Forms)应用程序中。在那里存储日志文件的文件夹是 ${specialfolder:folder=MyDocuments}。如果我将该文件夹更改为例如/sdcard/Download 我看到创建了一个日志文件夹,我可以访问/复制日志文件。

C:\Users\bachph>C:\Android\android-sdk\platform-tools\adb.exe pull /sdcard/Download/logs/ D:\temp
/sdcard/Download/logs/: 2 files pulled. 5.4 MB/s (2077256 bytes in 0.370s)

如果我现在将文件夹改回 ${specialfolder:folder=MyDocuments} 并打印该文件夹的路径

LogManager.GetCurrentClassLogger().Info("NLog.config loaded. Application Start.");
LogManager.GetCurrentClassLogger().Info($"NLog logs to {Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)}");

我看不到 shell 中的数据,也无法从该文件夹访问/复制它们。我现在不确定我 Android 是否只允许访问文件夹/文件,或者 NLog 是否无法写入该文件夹。

有什么想法吗?


编辑:内部跟踪日志输出

2019-10-07 11:39:47.6959 Debug FileTarget(Name=f): Process file '/data/data/de.app.debug/files/logs/app-2019-10-07.log' on startup
2019-10-07 11:39:47.7298 Debug Creating file appender: /data/data/de.app.debug/files/logs/app-2019-10-07.log
2019-10-07 11:39:47.7377 Debug Mutex for file archive not supported
2019-10-07 11:39:47.7439 Trace Opening data/data/de.app.debug/files/logs/app-2019-10-07.log with allowFileSharedWriting=False
2019-10-07 11:39:47.6440 INFO App.Activities.Base.MainActivity NLog.config loaded. Application Start.

我找到了一种访问 /data/data 文件夹中数据的方法。不幸的是,访问数据有点棘手。

首先,"run-as" 命令在我的设备上不起作用。所以我必须创建一个 "Backup" 来从应用程序中获取所有数据。

您可以使用以下方式创建备份:

adb.exe backup -f D:\temp\backup.ab -noapk de.app.debug
adb.exe backup -f <path-to-local-file> -noapk <app-base-package>

系统会提示您确认设备上的操作。或者,您可以为备份文件选择一个密码。

这将创建一个 android 备份。要访问备份文件中的数据,您需要 java archive 的帮助。从那里获取最新的 abe-all.jar。

您现在可以使用

将 android 备份转换为 tar 存档
java -jar abe-all.jar unpack backup.ab backup.tar [optional-password]

然后简单地提取新创建的 backup.tar 文件。您会在其中找到应用程序包中的所有数据。

在 Xamarin 平台上访问日志文件的另一种方法是保存在特殊文件夹“我的文档”中。

https://docs.microsoft.com/en-us/xamarin/android/platform/files/(参见System.Environment.SpecialFolder.MyDocuments

NLog 有 ${specialfolder:folder=MyDocuments}。另见 https://github.com/NLog/NLog/wiki/Special-Folder-Layout-Renderer

然后在应用程序中创建一个功能,从文件夹中读取当前日志文件,并发送到电子邮件应用程序或进行 http 上传(或者直接在应用程序关于对话框中显示日志内容)