mirror of https://github.com/deavmi/dlog.git
98 lines
1.5 KiB
D
98 lines
1.5 KiB
D
module dlog.nu.basic;
|
|
|
|
import dlog.nu.core;
|
|
|
|
public class BasicMessage : Message
|
|
{
|
|
private string text;
|
|
private Level level;
|
|
|
|
this(string text, Level level = Level.INFO)
|
|
{
|
|
this.text = text;
|
|
this.level = level;
|
|
}
|
|
|
|
public string getText()
|
|
{
|
|
return this.text;
|
|
}
|
|
|
|
public Level getLevel()
|
|
{
|
|
return this.level;
|
|
}
|
|
}
|
|
|
|
public class Context
|
|
{
|
|
|
|
}
|
|
|
|
public class FileHandler : Handler
|
|
{
|
|
import std.stdio : File;
|
|
private File file;
|
|
this(File file)
|
|
{
|
|
this.file = file;
|
|
}
|
|
|
|
public void handle(Message message)
|
|
{
|
|
// Only handle BasicMessage(s)
|
|
BasicMessage bmesg = cast(BasicMessage)message;
|
|
if(bmesg)
|
|
{
|
|
file.writeln(bmesg.getText());
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum Level
|
|
{
|
|
ERROR,
|
|
WARNING,
|
|
INFO,
|
|
DEBUG
|
|
}
|
|
|
|
private class LevelFilter : Filter
|
|
{
|
|
private Level* level;
|
|
|
|
this(Level* level)
|
|
{
|
|
this.level = level;
|
|
}
|
|
|
|
public bool filter(Message message)
|
|
{
|
|
// Only handle BasicMessage(s)
|
|
BasicMessage bmesg = cast(BasicMessage)message;
|
|
if(bmesg)
|
|
{
|
|
return bmesg.getLevel() <= *this.level;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public class BasicLogger : Logger
|
|
{
|
|
private Level level;
|
|
|
|
this()
|
|
{
|
|
// Attach a new level-filter
|
|
// with access to our current
|
|
// level
|
|
addFilter(new LevelFilter(&level));
|
|
}
|
|
|
|
public final void setLevel(Level level)
|
|
{
|
|
this.level = level;
|
|
}
|
|
} |