mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-05 18:46:30 +01:00
48 lines
1.3 KiB
C#
48 lines
1.3 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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|