module logging.sinks.LogSink; import logging.levels; import std.datetime; interface LogSink { void log(LogLevel loglevel, string m, string func, size_t line, SysTime time, lazy string msg, uint thread_id); void loglevel(LogLevel level) @property; } class LogSinkBase : LogSink { public override void loglevel(LogLevel level) @property { _loglevel = level; } public final void log(LogLevel loglevel, string m, string func, size_t line, SysTime time, lazy string msg, uint thread_id) { if(loglevel <= _loglevel) { _log(loglevel, m, func, line, time, msg, thread_id); } } public abstract void _log(LogLevel loglevel, string m, string func, size_t line, SysTime time, string msg, uint thread_id); protected LogLevel _loglevel = LogLevel.Debug; }