Utils/Logger: Implement areas and streams commands
g0dil [Fri, 6 Feb 2009 22:39:43 +0000 (22:39 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1103 270642c3-0616-0410-b53a-bc976706d245

Utils/Logger/Target.cc
Utils/Logger/Target.ih

index 22d5823..2760ae3 100644 (file)
@@ -88,9 +88,13 @@ prefix_ senf::log::Target::Target(std::string const & name)
                                                         std::string const &, std::string const &,
                                                         unsigned, action_t, int)>(&Target::route),
                                                     this)))
-        .arg("stream", "stream to match or empty to match any stream",
+        .arg("stream", 
+             "stream to match or empty to match any stream\n"
+             "              use '/sys/log/streams' to list all available streams",
              kw::default_value="")
-        .arg("area", "area to match or empty to match any area",
+        .arg("area", 
+             "area to match or empty to match any area\n"
+             "              use '/sys/log/areas' to list all available areas",
              kw::default_value="")
         .arg("level", "log level, one of: VERBOSE, NOTICE, MESSAGE, IMPORTANT, CRITICAL, FATAL",
              kw::default_value=local::VERBOSE)
@@ -237,6 +241,26 @@ prefix_ senf::log::detail::TargetRegistry::TargetRegistry()
     : fallbackRouting_(true)
 {
     console::sysdir().add("log", consoleDir_());
+    consoleDir_().add("areas", senf::membind(&TargetRegistry::consoleAreas, this))
+        .doc("List all areas");
+    consoleDir_().add("streams", senf::membind(&TargetRegistry::consoleStreams, this))
+        .doc("List all streams");
+}
+
+prefix_ void senf::log::detail::TargetRegistry::consoleAreas(std::ostream & os)
+{
+    AreaRegistry::iterator i (AreaRegistry::instance().begin());
+    AreaRegistry::iterator const i_end (AreaRegistry::instance().end());
+    for (; i != i_end; ++i)
+        os << *i << "\n";
+}
+
+prefix_ void senf::log::detail::TargetRegistry::consoleStreams(std::ostream & os)
+{
+    StreamRegistry::iterator i (StreamRegistry::instance().begin());
+    StreamRegistry::iterator const i_end (StreamRegistry::instance().end());
+    for (; i != i_end; ++i)
+        os << *i << "\n";
 }
 
 ////////////////////////////////////////
index c6d4efb..4d65aa9 100644 (file)
@@ -57,6 +57,9 @@ namespace detail {
         void registerTarget(Target * target, std::string const & name);
         void unregisterTarget(Target * target);
 
+        void consoleAreas(std::ostream & os);
+        void consoleStreams(std::ostream & os);
+
         typedef std::set<Target *> Targets;
         Targets targets_;