Где хранить файлы журнала NLog на Android Xamarin? - PullRequest
2 голосов
/ 07 октября 2019

В учебнике я выполнил несколько шагов по интеграции 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)}");

Я не вижу данные в оболочке и не могу получить доступ / скопировать их из этой папки. Теперь я не уверен, разрешает ли мне 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.

Ответы [ 2 ]

3 голосов
/ 07 октября 2019

Я нашел способ доступа к данным внутри папки / 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-архива . Получите последнюю версию abe-all.jar оттуда.

Теперь вы можете преобразовать резервную копию Android в архив tar с помощью

java -jar abe-all.jar unpack backup.ab backup.tar [optional-password]

Затем просто распакуйте вновь созданный файл backup.tar. Там вы найдете все данные из вашего пакета приложений.

1 голос
/ 22 октября 2019

Альтернативный способ доступа к лог-файлам на платформе 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-загрузку (или просто показать содержимое журнала непосредственно вдиалоговое окно приложения)

...