diff --git a/source/dlog/syslog.d b/source/dlog/syslog.d new file mode 100644 index 0000000..598f193 --- /dev/null +++ b/source/dlog/syslog.d @@ -0,0 +1,57 @@ +module dlog.syslog; + +import core.sys.posix.syslog : openlog, syslog, closelog; + +import dlog.core : Handler, Message; +import dlog.basic : BasicMessage; + +/** + * A file-based handler which + * writes `BasicMessage`(s) + * to a provided file + */ +public class SyslogHandler : Handler +{ + this(string name) + { + // TODO: what top set options and facility to? + openlog(name.ptr, 0, 0); + } + + /** + * Handles the message, does a + * no-op if the message is + * not a kind-of `BasicMessage` + * + * Params: + * message = the message + */ + public void handle(Message message) + { + // Only handle BasicMessage(s) + BasicMessage bmesg = cast(BasicMessage)message; + if(bmesg) + { + // TODO: What to set priortiy to? + syslog(0, bmesg.getText().ptr); + } + } + + ~this() + { + closelog(); + } +} + +unittest +{ + BasicLogger log = new BasicLogger(); + log.addHandler(new SyslogHandler("Ting")); + log.log(new BasicMessage("Howdy")); + +} + +version(unittest) +{ + import dlog.basic; +} \ No newline at end of file