Skip to content
Snippets Groups Projects
Commit eb0041e0 authored by g0dil's avatar g0dil
Browse files

Utils/Logger: Add log formatting console commands

parent 1faafbcd
No related branches found
No related tags found
No related merge requests found
......@@ -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///////////////////////////////////////
......
......@@ -32,6 +32,7 @@
#include <locale>
#include <boost/date_time/posix_time/posix_time.hpp>
#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;
......
......@@ -29,6 +29,7 @@
// Custom includes
#include <sstream>
#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_;
......
......@@ -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) )
{}
......
......@@ -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
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment