Initial commit

This commit is contained in:
Ellpeck 2020-07-23 02:24:18 +02:00
commit d2aa2e1b32
10 changed files with 171 additions and 0 deletions

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
.idea

16
ExtremelySimpleLogger.sln Normal file
View file

@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtremelySimpleLogger", "ExtremelySimpleLogger\ExtremelySimpleLogger.csproj", "{D323F21E-8DE7-46DB-8E34-E4739876F6CB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D323F21E-8DE7-46DB-8E34-E4739876F6CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D323F21E-8DE7-46DB-8E34-E4739876F6CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D323F21E-8DE7-46DB-8E34-E4739876F6CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D323F21E-8DE7-46DB-8E34-E4739876F6CB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,11 @@
using System;
namespace ExtremelySimpleLogger {
public class ConsoleSink : Sink {
public override void Log(string s) {
Console.WriteLine(s);
}
}
}

View file

@ -0,0 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,30 @@
using System;
using System.IO;
namespace ExtremelySimpleLogger {
public class FileSink : Sink {
private readonly StreamWriter writer;
public FileSink(string file, bool append) :
this(new FileInfo(file), append) {
}
public FileSink(FileInfo file, bool append) {
var dir = file.Directory;
if (dir != null && !dir.Exists)
dir.Create();
if (!append && file.Exists)
file.Delete();
this.writer = file.AppendText();
this.writer.AutoFlush = true;
}
public override void Log(string s) {
this.writer.WriteLine(s);
}
}
}

View file

@ -0,0 +1,12 @@
namespace ExtremelySimpleLogger {
public enum LogLevel {
Trace,
Debug,
Info,
Warn,
Error,
Fatal
}
}

View file

@ -0,0 +1,7 @@
namespace ExtremelySimpleLogger {
public class Logger {
}
}

View file

@ -0,0 +1,40 @@
using System;
using System.Text;
namespace ExtremelySimpleLogger {
public abstract class Sink {
public LogLevel MinimumLevel { get; set; } = LogLevel.Info;
public LogFormatter Formatter { get; set; }
public Sink() {
this.Formatter = this.FormatDefault;
}
public void Log(Logger logger, LogLevel level, object message, Exception e = null) {
this.Log(this.Formatter.Invoke(logger, level, message, e));
}
public abstract void Log(string s);
public virtual string FormatDefault(Logger logger, LogLevel level, object message, Exception e = null) {
var builder = new StringBuilder();
// date
builder.Append($"[{DateTime.Now}] ");
// logger name
if (!string.IsNullOrEmpty(logger.Name))
builder.Append($"[{logger.Name}] ");
// log level
builder.Append($"[{level}] ");
// message
builder.Append(message);
// stack trace
if (e != null)
builder.Append($"\n{e.StackTrace}");
return builder.ToString();
}
public delegate string LogFormatter(Logger logger, LogLevel level, object message, Exception e = null);
}
}

30
Sample/Program.cs Normal file
View file

@ -0,0 +1,30 @@
using System;
using System.IO;
using ExtremelySimpleLogger;
namespace Sample {
internal static class Program {
private static void Main(string[] args) {
var logger = new Logger {
Name = "Test Logger",
Sinks = {
new FileSink("Log.txt", true) {MinimumLevel = LogLevel.Trace},
new ConsoleSink()
}
};
logger.Info("Logger loaded.");
logger.Info("Program starting.");
logger.Warn("Unsafe code follows!");
try {
File.OpenRead("does/not/exist");
} catch (Exception e) {
logger.Error("An exception was thrown!", e);
}
logger.Log(LogLevel.Trace, "The program finished.");
}
}
}

12
Sample/Sample.csproj Normal file
View file

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ExtremelySimpleLogger\ExtremelySimpleLogger.csproj" />
</ItemGroup>
</Project>