Utils/Console: Parser based character classifiers
[senf.git] / Utils / Logger / SyslogTarget.cc
index 61212ad..40cdd58 100644 (file)
 //#include "SyslogTarget.ih"
 
 // Custom includes
+#include "../Console/Console.hh"
 
 //#include "SyslogTarget.mpp"
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
 
-int const senf::log::SyslogTarget::LEVELMAP_[8] = {
+int const senf::log::SyslogTarget::LEVELMAP[8] = {
     0, LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING, LOG_CRIT, LOG_EMERG, 0 };
 
 prefix_ void senf::log::SyslogTarget::v_write(time_type timestamp, std::string const & stream,
@@ -40,9 +41,40 @@ prefix_ void senf::log::SyslogTarget::v_write(time_type timestamp, std::string c
                                               std::string const & message)
 {
     if (area != "senf::log::DefaultArea")
-        syslog(facility_ | LEVELMAP_[level], "[%s] %s", area.c_str(), message.c_str());
+        syslog(facility_ | LEVELMAP[level], "[%s] %s", area.c_str(), message.c_str());
     else
-        syslog(facility_ | LEVELMAP_[level], "%s", message.c_str());
+        syslog(facility_ | LEVELMAP[level], "%s", message.c_str());
+}
+
+namespace senf {
+namespace log {
+
+    SENF_CONSOLE_REGISTER_ENUM_MEMBER(SyslogTarget, LogFacility,
+                                      (AUTHPRIV)(CRON)(DAEMON)(FTP)(KERN)(LPR)(MAIL)(NEWS)(SYSLOG)
+                                      (USER)(UUCP)(LOCAL0)(LOCAL1)(LOCAL2)(LOCAL3)(LOCAL4)(LOCAL5)
+                                      (LOCAL6)(LOCAL7));
+
+}}
+
+prefix_ senf::log::SyslogTarget::RegisterConsole::RegisterConsole()
+{
+    namespace kw = senf::console::kw;
+
+    detail::TargetRegistry::instance().consoleDir().add("syslog-target",&RegisterConsole::create)
+        .arg("facility", "syslog facility to send messages to. One of\n"
+             "                  AUTHPRIV, CRON, DAEMON, FTP, KERN, LPR, MAIL, NEWS, SYSLOG, USER,\n"
+             "                  UUCP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7",
+             kw::default_value = USER)
+        .doc("Create new syslog target.");
+}
+
+prefix_ boost::shared_ptr<senf::console::DirectoryNode>
+senf::log::SyslogTarget::RegisterConsole::create(LogFacility facility)
+{
+    std::auto_ptr<Target> tp (new SyslogTarget(facility));
+    Target & target (*tp.get());
+    detail::TargetRegistry::instance().dynamicTarget(tp);
+    return target.consoleDir().node().thisptr();
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////