Ваша конфигурация NLog показывает, что она сохраняет журналы в подпапке Logs
папки приложения:
Path.Combine(ApplicationData.Current.LocalFolder.Path, "Logs")
. Вы можете найти эту папку вручную, перейдя в C:\Users\[UserName]\AppData\Local\Packages
, выполнив поиск идентификатора пакета вашего приложения иперейдите к LocalState
, где в качестве подпапки должно быть Logs
.
Удаление журналов
Удаление журналов довольно просто - вы заходите в папку журналов и пытаетесь удалить все файлы внутри:
var logsFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(
"Logs", CreationCollisionOption.OpenIfExists);
var items = (await logsFolder.GetItemsAsync()).ToArray();
foreach (var item in items)
{
try
{
await item.DeleteAsync(StorageDeleteOption.PermanentDelete);
}
catch
{
//ignore exception - could happen if some file is currently open
}
}
Поскольку некоторые файлы в настоящее время могут быть открыты регистратором, я намеренно пропускаю возможные исключения.
Экспорт журналов
Для экспорта требуется сначала создать zip
файл из папки журналов.Вы можете использовать ZipFile
API для этого.После того, как у вас есть файл, вы можете, например, поделиться им, используя системный интерфейс общего доступа.
private async void Export()
{
var logsFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(
"Logs",
CreationCollisionOption.OpenIfExists);
//first delete existing export if there is one
var zipFile = await ApplicationData.Current.LocalFolder
.TryGetItemAsync("LogsExport.zip");
if (zipFile != null)
{
await zipFile.DeleteAsync();
}
//create zip export of logs
ZipFile.CreateFromDirectory(logsFolder.Path,
Path.Combine(
ApplicationData.Current.LocalFolder.Path,
"LogsExport.zip"),
CompressionLevel.Fastest, true);
//do something with the exported file
var dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;
DataTransferManager.ShowShareUI();
}
private async void DataTransferManager_DataRequested(DataTransferManager sender,
DataRequestedEventArgs args)
{
var dataRequest = args.Request;
//mark operation as asynchronous
var deferral = dataRequest.GetDeferral();
//setting title is mandatory
dataRequest.Data.Properties.Title = "Share exported logs";
//set shared file
var file = await StorageFile.GetFileFromPathAsync(
Path.Combine(ApplicationData.Current.LocalFolder.Path,
"LogsExport.zip"));
dataRequest.Data.SetStorageItems(new IStorageItem[]{ file });
//unsubscribe event
var dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested -= DataTransferManager_DataRequested;
//complete operation
deferral.Complete();
}
Поскольку нам нужно получить доступ к StorageFile
, нам нужно выполнить операцию асинхронно, поэтомумы используем dataRequest.GetDeferral()
, чтобы сообщить системе, что мы начали асинхронную операцию, и она должна ждать dataRequest.Complete()
, когда данные будут готовы.