#include <locale>
#include <boost/date_time/posix_time/posix_time.hpp>
#include "../Scheduler/ClockService.hh"
+#include "../Console/Console.hh"
//#include "LogFormat.mpp"
#define prefix_
: 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;
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) )
{}