WIP
parent
c4e64a1ebf
commit
8cb2675b8a
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
Loading…
Reference in New Issue