X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FLogFormat.cc;h=7b816a30acfb2ccb28a91a7fc0ddc22c7efaaaa7;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=217c3760f74075073d40262e977735f760b12db2;hpb=07b8c0784c854893cd1a4ecb9aa051a625ebe17e;p=senf.git diff --git a/Utils/Logger/LogFormat.cc b/Utils/Logger/LogFormat.cc index 217c376..7b816a3 100644 --- a/Utils/Logger/LogFormat.cc +++ b/Utils/Logger/LogFormat.cc @@ -32,6 +32,7 @@ #include #include #include "../Scheduler/ClockService.hh" +#include "../Console/Console.hh" //#include "LogFormat.mpp" #define prefix_ @@ -41,13 +42,66 @@ prefix_ senf::log::detail::LogFormat::LogFormat() : tag_ (detail::getDefaultTag()), noformat_ (false), showTime_ (true), showStream_ (false), showLevel_ (true), showArea_ (true), timeBase_ (-1) { - std::locale const & loc (datestream_.getloc()); - datestream_.imbue( std::locale( - loc, new boost::posix_time::time_facet("%Y-%m-%d %H:%M:%S.%f-0000")) ); + timeFormat("%Y-%m-%d %H:%M:%S.%f-0000"); +} + +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; + + 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."); +} + +prefix_ void senf::log::detail::LogFormat::consoleFormat(std::ostream & os) +{ + if (showTime_) os << "showTime "; + if (showStream_) os << "showStream "; + if (showLevel_) os << "showLevel "; + if (showArea_) os << "showArea "; + if (showTime_ || showStream_ || showLevel_ || showArea_) os << "\n"; + else os << "(all flags disabled)\n"; + + os << "timeFormat \"" << timeFormat_ << "\"\n"; + os << "tag \"" << tag_ << "\"\n"; } prefix_ void senf::log::detail::LogFormat::timeFormat(std::string const & format) { + timeFormat_ = format; if (format.empty()) { noformat_ = true; timeBase_ = -1;