mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-16 15:16:34 +01:00
47 lines
1.1 KiB
C#
47 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Concurrent;
|
|
using Serilog.Core;
|
|
using Serilog.Events;
|
|
|
|
namespace TINK.Services.Logging
|
|
{
|
|
public class MemoryStackSink : ILogEventSink
|
|
{
|
|
private readonly IFormatProvider _formatProvider;
|
|
|
|
private static ConcurrentStack<string> _MessageStack = new ConcurrentStack<string>();
|
|
|
|
/// <summary>
|
|
/// Reads all messages an clears memory stack.
|
|
/// </summary>
|
|
/// <returns>Array of messages.</returns>
|
|
public static string[] PopAllMessages()
|
|
{
|
|
int countOfMessages = _MessageStack.Count;
|
|
if (countOfMessages <= 0)
|
|
return new string[0];
|
|
|
|
string[] messages = new string[countOfMessages];
|
|
if (_MessageStack.TryPopRange(messages) <= 0)
|
|
return new string[0];
|
|
|
|
return messages;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clears the message stack.
|
|
/// </summary>
|
|
public static void ClearMessages() => _MessageStack.Clear();
|
|
|
|
public MemoryStackSink(IFormatProvider formatProvider)
|
|
{
|
|
_formatProvider = formatProvider;
|
|
}
|
|
|
|
public void Emit(LogEvent logEvent)
|
|
{
|
|
var message = logEvent.RenderMessage(_formatProvider);
|
|
_MessageStack.Push(DateTimeOffset.Now.ToString() + " " + message);
|
|
}
|
|
}
|
|
}
|