mirror of https://github.com/deavmi/dlog.git
Logger
- Implemented `log(Message message)` which does filtering, transformation and lastly handling
This commit is contained in:
parent
e35f6fba73
commit
f6ebb070cc
|
@ -10,7 +10,7 @@ public interface Filter
|
|||
public bool filter(Message message);
|
||||
}
|
||||
|
||||
public interface MessageTransform
|
||||
public interface Transform
|
||||
{
|
||||
public Message transform(Message message);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ import core.sync.mutex : Mutex;
|
|||
|
||||
public abstract class Logger
|
||||
{
|
||||
private SList!(MessageTransform) transforms;
|
||||
private SList!(Transform) transforms;
|
||||
private SList!(Filter) filters;
|
||||
private SList!(Handler) handlers;
|
||||
private Mutex lock; // Lock for attached handlers, filters and transforms
|
||||
|
@ -47,7 +47,7 @@ public abstract class Logger
|
|||
}
|
||||
|
||||
// TODO: Handle duplicate?
|
||||
public final void addTransform(MessageTransform transform)
|
||||
public final void addTransform(Transform transform)
|
||||
{
|
||||
scope(exit)
|
||||
{
|
||||
|
@ -60,7 +60,7 @@ public abstract class Logger
|
|||
}
|
||||
|
||||
// TODO: Hanmdle not found explicitly?
|
||||
public final void removeTransform(MessageTransform transform)
|
||||
public final void removeTransform(Transform transform)
|
||||
{
|
||||
scope(exit)
|
||||
{
|
||||
|
@ -71,4 +71,38 @@ public abstract class Logger
|
|||
|
||||
this.transforms.linearRemoveElement(transform);
|
||||
}
|
||||
|
||||
// Logs an actual message
|
||||
//
|
||||
// This first passes it over all filters
|
||||
// then to a transform and then copies
|
||||
// to each handler
|
||||
public final void log(Message message)
|
||||
{
|
||||
scope(exit)
|
||||
{
|
||||
this.lock.unlock();
|
||||
}
|
||||
|
||||
this.lock.lock();
|
||||
|
||||
foreach(Filter filter; this.filters)
|
||||
{
|
||||
if(!filter.filter(message))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Message curMessage = message;
|
||||
foreach(Transform transform; this.transforms)
|
||||
{
|
||||
curMessage = transform.transform(curMessage);
|
||||
}
|
||||
|
||||
foreach(Handler handler; this.handlers)
|
||||
{
|
||||
handler.handle(curMessage);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue