72 lines
2.0 KiB
C#
72 lines
2.0 KiB
C#
|
#if WINDOWSMETRO
|
|||
|
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Diagnostics.Tracing;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Windows.Storage;
|
|||
|
|
|||
|
namespace ANX.Framework.NonXNA.Windows8
|
|||
|
{
|
|||
|
internal class MetroLogger : EventListener
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Storage file to be used to write logs
|
|||
|
/// </summary>
|
|||
|
private StorageFile _storageFile = null;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The format to be used by logging.
|
|||
|
/// </summary>
|
|||
|
private readonly string _format = "{0:yyyy-MM-dd HH\\:mm\\:ss\\:ffff}\tType: {1}\tId: {2}\tMessage: '{3}'";
|
|||
|
|
|||
|
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1);
|
|||
|
|
|||
|
public async void Initialize(string fileName)
|
|||
|
{
|
|||
|
_storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName.Replace(" ", "_"), CreationCollisionOption.OpenIfExists);
|
|||
|
|
|||
|
this.EnableEvents(ANX.Framework.NonXNA.Windows8.MetroEventSource.Log, System.Diagnostics.Tracing.EventLevel.Informational);
|
|||
|
}
|
|||
|
|
|||
|
private async void WriteToFile(IEnumerable<string> lines)
|
|||
|
{
|
|||
|
await _semaphore.WaitAsync();
|
|||
|
|
|||
|
Task.Run(async () =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await FileIO.AppendLinesAsync(_storageFile, lines);
|
|||
|
}
|
|||
|
catch (Exception exc)
|
|||
|
{
|
|||
|
Debug.WriteLine(exc);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnEventWritten(EventWrittenEventArgs eventData)
|
|||
|
{
|
|||
|
if (_storageFile == null)
|
|||
|
return;
|
|||
|
|
|||
|
var lines = new List<string>();
|
|||
|
|
|||
|
var newFormatedLine = string.Format(_format, DateTime.Now, eventData.Level, eventData.EventId, eventData.Payload[0]);
|
|||
|
|
|||
|
Debug.WriteLine(newFormatedLine);
|
|||
|
|
|||
|
lines.Add(newFormatedLine);
|
|||
|
|
|||
|
WriteToFile(lines);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endif
|