sharee.bike-App/TINKLib/Services/Logging/MemoryStackSink.cs
Anja Müller-Meißner 0468955d49 Version 3.0.338
2022-09-08 09:55:14 +02:00

48 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);
}
}
}