master
Harald Wolff 2019-03-18 08:12:51 +01:00
parent c4e64a1ebf
commit 8cb2675b8a
2 changed files with 111 additions and 0 deletions

110
MemoryLogger.cs 100644
View File

@ -0,0 +1,110 @@
// /**
// * File: MemoryLogger.cs
// * Author: haraldwolff
// *
// * This file and it's content is copyrighted by the Author and / or copyright holder.
// * Any use wihtout proper permission is illegal and may lead to legal actions.
// *
// *
// **/
using System;
using ln.logging;
using System.Linq;
namespace sharp.logging
{
public class MemoryLogger : ILoggingBackend
{
private LogEntry[] Entries = new LogEntry[256];
private int CurrentLogPointer = 255;
public MemoryLogger()
{
}
public MemoryLogger(int bufferLength)
{
Entries = new LogEntry[bufferLength];
CurrentLogPointer = Entries.Length - 1;
}
public LogLevel MinLogLevel { get; set; } = LogLevel.FATAL;
public LogLevel MaxLogLevel { get; set; } = LogLevel.INFO;
public void Message(LogLevel logLevel, string[] lines)
{
lock (this)
{
Entries[CurrentLogPointer].LogLevel = logLevel;
Entries[CurrentLogPointer].Lines = String.Join("\n", lines);
CurrentLogPointer = NextLogPointer;
}
}
public LogEntry[] GetLogEntries()
{
lock (this)
{
LogEntry[] prepare = new LogEntry[Entries.Length];
if (CurrentLogPointer == (Entries.Length - 1))
{
Array.Copy(Entries, prepare, Entries.Length);
}
else
{
Array.Copy(Entries, PreviousLogPointer, prepare, 0, Entries.Length - PreviousLogPointer);
Array.Copy(Entries, 0, prepare, Entries.Length - PreviousLogPointer, PreviousLogPointer);
}
return prepare.Where((x) => x.Lines != null).ToArray();
}
}
public LogEntry[] GetLogEntries(LogLevel maxLogLevel)
{
lock (this)
{
LogEntry[] prepare = new LogEntry[Entries.Length];
if (CurrentLogPointer == (Entries.Length - 1))
{
Array.Copy(Entries, prepare, Entries.Length);
}
else
{
Array.Copy(Entries, PreviousLogPointer, prepare, 0, Entries.Length - PreviousLogPointer);
Array.Copy(Entries, 0, prepare, Entries.Length - PreviousLogPointer, PreviousLogPointer);
}
return prepare.Where((x) => (x.Lines != null) && (maxLogLevel >= x.LogLevel)).ToArray();
}
}
private int NextLogPointer
{
get
{
int current = CurrentLogPointer;
current--;
if (current < 0)
current = Entries.Length - 1;
return current;
}
}
private int PreviousLogPointer
{
get
{
int current = CurrentLogPointer;
current++;
if (current >= Entries.Length)
current = 0;
return current;
}
}
public struct LogEntry
{
public LogLevel LogLevel;
public string Lines;
}
}
}

View File

@ -39,6 +39,7 @@
<Compile Include="ILoggingBackend.cs" />
<Compile Include="LoggingWriter.cs" />
<Compile Include="LoggingBackend.cs" />
<Compile Include="MemoryLogger.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>