From: g0dil Date: Sat, 7 Feb 2009 14:20:16 +0000 (+0000) Subject: Utils/Logger: Add log formatting console commands X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=3312f76b1836cad486d5f38690ee9c0f84cbc12c;p=senf.git Utils/Logger: Add log formatting console commands git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1105 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Utils/Logger/IOStreamTarget.cci b/Utils/Logger/IOStreamTarget.cci index e4f7968..c5e1a80 100644 --- a/Utils/Logger/IOStreamTarget.cci +++ b/Utils/Logger/IOStreamTarget.cci @@ -31,7 +31,7 @@ ///////////////////////////////cci.p/////////////////////////////////////// prefix_ senf::log::IOStreamTarget::IOStreamTarget(std::string const & name, std::ostream & os) - : Target(name), stream_ (os) + : Target(name), LogFormat(consoleDir()), stream_ (os) {} ///////////////////////////////cci.e/////////////////////////////////////// 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; diff --git a/Utils/Logger/LogFormat.hh b/Utils/Logger/LogFormat.hh index 2c4ff00..8fc4684 100644 --- a/Utils/Logger/LogFormat.hh +++ b/Utils/Logger/LogFormat.hh @@ -29,6 +29,7 @@ // Custom includes #include #include "Target.hh" +#include "../Console/LazyDirectory.hh" //#include "LogFormat.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -41,6 +42,7 @@ namespace detail { { public: LogFormat(); + explicit LogFormat(console::ScopedDirectory<> & dir); void showTime(bool flag = true); ///< Enable or disable output of time field void showStream(bool flag = true); ///< Enable or disable output of stream field @@ -69,7 +71,10 @@ namespace detail { bool isPlainFormat() const; private: + void consoleFormat(std::ostream & os); + std::string tag_; + std::string timeFormat_; std::stringstream datestream_; bool noformat_; bool showTime_; diff --git a/Utils/Logger/SyslogUDPTarget.cci b/Utils/Logger/SyslogUDPTarget.cci index 52a5055..d0a61df 100644 --- a/Utils/Logger/SyslogUDPTarget.cci +++ b/Utils/Logger/SyslogUDPTarget.cci @@ -34,25 +34,25 @@ prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet4Address const & target, int facility) - : Target("udp-" + senf::str(target)), facility_ (facility), + : Target("udp-" + senf::str(target)), LogFormat(consoleDir()), facility_ (facility), handle_ ( senf::ConnectedUDPv4ClientSocketHandle(senf::INet4SocketAddress(target, 514u)) ) {} prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet4SocketAddress const & target, int facility) - : Target("udp-" + senf::str(target)), facility_ (facility), + : Target("udp-" + senf::str(target)), LogFormat(consoleDir()), facility_ (facility), handle_ ( senf::ConnectedUDPv4ClientSocketHandle(target) ) {} prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet6Address const & target, int facility) - : Target("udp-" + senf::str(target)), facility_ (facility), + : Target("udp-" + senf::str(target)), LogFormat(consoleDir()), facility_ (facility), handle_ ( senf::ConnectedUDPv6ClientSocketHandle(senf::INet6SocketAddress(target, 514u)) ) {} prefix_ senf::log::SyslogUDPTarget::SyslogUDPTarget(senf::INet6SocketAddress const & target, int facility) - : Target("udp-" + senf::str(target)), facility_ (facility), + : Target("udp-" + senf::str(target)), LogFormat(consoleDir()), facility_ (facility), handle_ ( senf::ConnectedUDPv6ClientSocketHandle(target) ) {} diff --git a/Utils/Logger/Target.cc b/Utils/Logger/Target.cc index 38742bc..a35fca6 100644 --- a/Utils/Logger/Target.cc +++ b/Utils/Logger/Target.cc @@ -277,6 +277,11 @@ prefix_ void senf::log::detail::TargetRegistry::consoleWrite(std::string const & write(*s, *a, level, msg); } +prefix_ senf::console::ScopedDirectory<> & senf::log::Target::consoleDir() +{ + return consoleDir_(); +} + //////////////////////////////////////// // private members diff --git a/Utils/Logger/Target.hh b/Utils/Logger/Target.hh index 69fd1d1..db33fa5 100644 --- a/Utils/Logger/Target.hh +++ b/Utils/Logger/Target.hh @@ -341,6 +341,9 @@ namespace log { void flush(); ///< Clear routing table + protected: + senf::console::ScopedDirectory<> & consoleDir(); ///< Get console/config directory + private: void route(detail::StreamBase const * stream, detail::AreaBase const * area, unsigned level, action_t action, int index);