Logger: use ClockService::now() as timeBase if empty timeFormat is given for a target
[senf.git] / senf / Utils / Logger / LogFormat.cc
index 55304a9..b1cdd4c 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Copyright (C) 2009 
+// Copyright (C) 2009
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
 //#include "LogFormat.ih"
 
 // Custom includes
-#include <errno.h>
 #include <unistd.h>
 #include <locale>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <senf/Scheduler/ClockService.hh>
-#include <senf/Utils/Console/Console.hh>
+#include <senf/Utils/Console/ScopedDirectory.hh>
+#include <senf/Utils/Console/ParsedCommand.hh>
 
 //#include "LogFormat.mpp"
 #define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 prefix_ senf::log::detail::LogFormat::LogFormat()
     : tag_ (detail::getDefaultTag()), noformat_ (false), showTime_ (true),
@@ -49,29 +49,29 @@ prefix_ senf::log::detail::LogFormat::LogFormat(console::ScopedDirectory<> & dir
     : tag_ (detail::getDefaultTag()), noformat_ (false), showTime_ (true),
       showStream_ (false), showLevel_ (true), showArea_ (true), timeBase_ (-1)
 {
-    namespace kw = senf::console::kw;
-    namespace fty = senf::console::factory;
+    namespace kw = console::kw;
+    namespace fty = console::factory;
 
     timeFormat("%Y-%m-%d %H:%M:%S.%f-0000");
 
-    dir.add("showTime", fty::Command(this, &LogFormat::showTime)
+    dir.add("showTime", fty::Command(&LogFormat::showTime, this)
             .arg("flag","whether to display the time in log messages",
                  kw::default_value = true)
             .doc("Set time display in log messages. If time display is enabled, see the 'timeFormat'\n"
                  "command to set the time format.") );
-    dir.add("showStream", fty::Command(this, &LogFormat::showStream)
+    dir.add("showStream", fty::Command(&LogFormat::showStream, this)
             .arg("flag","whether to display the stream in log messages",
                  kw::default_value = true)
-            .doc("Set strean display in log messages.") );
-    dir.add("showLevel", fty::Command(this, &LogFormat::showLevel)
+            .doc("Set stream display in log messages.") );
+    dir.add("showLevel", fty::Command(&LogFormat::showLevel, this)
             .arg("flag","whether to display the log level in log messages",
                  kw::default_value = true)
             .doc("Set log level display in log messages.") );
-    dir.add("showArea", fty::Command(this, &LogFormat::showArea)
+    dir.add("showArea", fty::Command(&LogFormat::showArea, this)
             .arg("flag","whether to display the area in log messages",
                  kw::default_value = true)
             .doc("Set area display in log messages.") );
-    dir.add("timeFormat", fty::Command(this, &LogFormat::timeFormat)
+    dir.add("timeFormat", fty::Command(&LogFormat::timeFormat, this)
             .arg("format","time format")
             .doc("Set time format. The time format is specified using a format string. This format\n"
                  "string follows the strftime format.\n"
@@ -79,11 +79,11 @@ prefix_ senf::log::detail::LogFormat::LogFormat(console::ScopedDirectory<> & dir
                  "As additional option, the format string may be set to the empty string. In this\n"
                  "case the time will be displayed as 'second.nanosecond' value. IN this case, the\n"
                  "time is displayed relative to the first message after changing the format.") );
-    dir.add("tag", fty::Command(this, &LogFormat::tag)
+    dir.add("tag", fty::Command(&LogFormat::tag, this)
             .arg("tag","log message tag prefix")
             .doc("Every log message is optionally prefixed with a tag value. This value defaults to\n"
                  "the executable name and pid.") );
-    dir.add("format", fty::Command(this, &LogFormat::consoleFormat)
+    dir.add("format", fty::Command(&LogFormat::consoleFormat, this)
             .doc("Show the current log message format.") );
 }
 
@@ -105,7 +105,7 @@ prefix_ void senf::log::detail::LogFormat::timeFormat(std::string const & format
     timeFormat_ = format;
     if (format.empty()) {
         noformat_ = true;
-        timeBase_ = -1;
+        timeBase_ = ClockService::now();
     } else {
         noformat_ = false;
         std::locale const & loc (datestream_.getloc());
@@ -123,14 +123,12 @@ prefix_ std::string senf::log::detail::LogFormat::prefix(time_type timestamp,
 
     if (showTime_) {
         if (noformat_) {
-            if (timeBase_ == -1) timeBase_ = timestamp;
             time_type delta (timestamp - timeBase_);
-            datestream_ << std::setfill('0') << std::setw(10)
-                        << (delta / 1000000000ll) << '.'
-                        << std::setfill('0') << std::setw(9)
-                        << (delta % 1000000000ll);
+            datestream_ << std::setfill('0')  << std::right
+                        << std::setw(10) << (delta / 1000000000ll) << '.'
+                        << std::setw(9) << (delta % 1000000000ll);
         }
-        else 
+        else
             datestream_ << senf::ClockService::abstime(timestamp);
         datestream_ << ' ';
     }
@@ -146,7 +144,7 @@ prefix_ std::string senf::log::detail::LogFormat::prefix(time_type timestamp,
     return datestream_.str();
 }
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 prefix_ void senf::log::detail::quoteNonPrintable(std::string & s)
 {
@@ -162,7 +160,7 @@ prefix_ std::string senf::log::detail::getDefaultTag()
     return ss.str();
 }
 
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 //#include "LogFormat.mpp"