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

vhipe2zx  于 2022-12-07  发布在  Android
关注(0)|答案(2)|浏览(190)

在一个tutorial中,我按照一些步骤将NLog集成到我们的Xamarin(非表单)应用程序中。在那里,存储日志文件的文件夹是${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.
dgjrabp2

dgjrabp21#

我找到了一种方法来访问/data/data文件夹中的数据。不幸的是,访问数据有点棘手。
首先,"run-as"命令在我的设备上不起作用。所以我必须创建一个"备份"来从应用程序中获取所有数据。
您可以使用以下内容创建备份:

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文件,你会在其中找到应用程序包中的所有数据。

tp5buhyn

tp5buhyn2#

在Xamarin平台上访问日志文件的另一种方法是保存在特殊文件夹My Documents中。
https://learn.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
然后在应用程序中创建一个功能,从文件夹中读取当前日志文件,并发送到email-app或进行http-upload(或直接在应用程序的"关于"对话框中显示日志内容)。
另一种方法是使用支持特定平台输出的NLog.Targets.MauiLog

  • Android-Android.实用程序.日志/日志猫
  • Apple iOS/MacOS-统一日志记录OSLog(替代打印和NSLog)

相关问题