switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Utils / Logger / LogFormat.cc
index 55304a9..4bafdbb 100644 (file)
@@ -1,24 +1,29 @@
 // $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>
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief LogFormat non-inline non-template implementation */
 //#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 +54,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 +84,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 +110,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 +128,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 +149,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 +165,7 @@ prefix_ std::string senf::log::detail::getDefaultTag()
     return ss.str();
 }
 
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 //#include "LogFormat.mpp"