X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FLogger%2FLogFormat.cc;h=4bafdbb0476e53571e930ab65d5abd05d15c6c24;hb=23a1bdee20b3fb19bd442efed8aa73b2bf0d585a;hp=0f205a59c65e10d52b727de2ee5591feae53bafb;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Utils/Logger/LogFormat.cc b/senf/Utils/Logger/LogFormat.cc index 0f205a5..4bafdbb 100644 --- a/senf/Utils/Logger/LogFormat.cc +++ b/senf/Utils/Logger/LogFormat.cc @@ -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 // -// 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 /** \file \brief LogFormat non-inline non-template implementation */ @@ -27,16 +32,16 @@ //#include "LogFormat.ih" // Custom includes -#include #include #include #include #include -#include +#include +#include //#include "LogFormat.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// prefix_ senf::log::detail::LogFormat::LogFormat() : tag_ (detail::getDefaultTag()), noformat_ (false), showTime_ (true), @@ -49,41 +54,42 @@ 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 kw = console::kw; + namespace fty = console::factory; timeFormat("%Y-%m-%d %H:%M:%S.%f-0000"); - dir.add("showTime", senf::membind(&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", senf::membind(&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", senf::membind(&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", senf::membind(&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", senf::membind(&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" - "\n" - "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", senf::membind(&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", senf::membind(&LogFormat::consoleFormat, this)) - .doc("Show the current log message format."); + 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(&LogFormat::showStream, this) + .arg("flag","whether to display the stream in log messages", + kw::default_value = true) + .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(&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(&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" + "\n" + "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(&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(&LogFormat::consoleFormat, this) + .doc("Show the current log message format.") ); } prefix_ void senf::log::detail::LogFormat::consoleFormat(std::ostream & os) @@ -104,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()); @@ -122,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_ << ' '; } @@ -145,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) { @@ -161,7 +165,7 @@ prefix_ std::string senf::log::detail::getDefaultTag() return ss.str(); } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "LogFormat.mpp"