mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
Basic implementation of some log sinks using the Boost log library
A sink called SYSLOG that is intended to consume all log messages. A sink called DATALOG that is intended for data logging.
This commit is contained in:
parent
e83b91de95
commit
98997fb745
56
Logger.cpp
56
Logger.cpp
@ -8,11 +8,9 @@
|
|||||||
#include <boost/log/expressions.hpp>
|
#include <boost/log/expressions.hpp>
|
||||||
#include <boost/log/expressions/keyword.hpp>
|
#include <boost/log/expressions/keyword.hpp>
|
||||||
#include <boost/log/attributes.hpp>
|
#include <boost/log/attributes.hpp>
|
||||||
#include <boost/log/utility/exception_handler.hpp>
|
|
||||||
#include <boost/log/utility/setup/console.hpp>
|
#include <boost/log/utility/setup/console.hpp>
|
||||||
#include <boost/log/utility/setup/common_attributes.hpp>
|
#include <boost/log/utility/setup/common_attributes.hpp>
|
||||||
#include <boost/log/utility/setup/filter_parser.hpp>
|
#include <boost/log/utility/setup/filter_parser.hpp>
|
||||||
#include <boost/log/utility/setup/formatter_parser.hpp>
|
|
||||||
#include <boost/log/utility/setup/from_stream.hpp>
|
#include <boost/log/utility/setup/from_stream.hpp>
|
||||||
#include <boost/log/utility/setup/settings.hpp>
|
#include <boost/log/utility/setup/settings.hpp>
|
||||||
#include <boost/log/sinks/sync_frontend.hpp>
|
#include <boost/log/sinks/sync_frontend.hpp>
|
||||||
@ -25,21 +23,21 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace logger = boost::log;
|
namespace logging = boost::log;
|
||||||
namespace srcs = logger::sources;
|
namespace srcs = logging::sources;
|
||||||
namespace sinks = logger::sinks;
|
namespace sinks = logging::sinks;
|
||||||
namespace keywords = logger::keywords;
|
namespace keywords = logging::keywords;
|
||||||
namespace expr = logger::expressions;
|
namespace expr = logging::expressions;
|
||||||
namespace attrs = logger::attributes;
|
namespace attrs = logging::attributes;
|
||||||
namespace ptime = boost::posix_time;
|
namespace ptime = boost::posix_time;
|
||||||
|
|
||||||
namespace Logger
|
namespace Logger
|
||||||
{
|
{
|
||||||
BOOST_LOG_GLOBAL_LOGGER_CTOR_ARGS (sys,
|
BOOST_LOG_GLOBAL_LOGGER_CTOR_ARGS (sys,
|
||||||
srcs::severity_channel_logger_mt<logger::trivial::severity_level>,
|
srcs::severity_channel_logger_mt<logging::trivial::severity_level>,
|
||||||
(keywords::channel = "SYSLOG"));
|
(keywords::channel = "SYSLOG"));
|
||||||
BOOST_LOG_GLOBAL_LOGGER_CTOR_ARGS (data,
|
BOOST_LOG_GLOBAL_LOGGER_CTOR_ARGS (data,
|
||||||
srcs::severity_channel_logger_mt<logger::trivial::severity_level>,
|
srcs::severity_channel_logger_mt<logging::trivial::severity_level>,
|
||||||
(keywords::channel = "DATALOG"));
|
(keywords::channel = "DATALOG"));
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@ -47,10 +45,10 @@ namespace Logger
|
|||||||
// Custom formatter factory to add TimeStamp format support in config ini file.
|
// Custom formatter factory to add TimeStamp format support in config ini file.
|
||||||
// Allows %TimeStamp(format=\"%Y.%m.%d %H:%M:%S.%f\")% to be used in ini config file for property Format.
|
// Allows %TimeStamp(format=\"%Y.%m.%d %H:%M:%S.%f\")% to be used in ini config file for property Format.
|
||||||
class TimeStampFormatterFactory
|
class TimeStampFormatterFactory
|
||||||
: public logger::basic_formatter_factory<char, ptime::ptime>
|
: public logging::basic_formatter_factory<char, ptime::ptime>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
formatter_type create_formatter (logger::attribute_name const& name, args_map const& args)
|
formatter_type create_formatter (logging::attribute_name const& name, args_map const& args)
|
||||||
{
|
{
|
||||||
args_map::const_iterator it = args.find ("format");
|
args_map::const_iterator it = args.find ("format");
|
||||||
if (it != args.end ())
|
if (it != args.end ())
|
||||||
@ -73,10 +71,10 @@ namespace Logger
|
|||||||
// Allows %Uptime(format=\"%O:%M:%S.%f\")% to be used in ini config file for property Format.
|
// Allows %Uptime(format=\"%O:%M:%S.%f\")% to be used in ini config file for property Format.
|
||||||
// attrs::timer value type is ptime::time_duration
|
// attrs::timer value type is ptime::time_duration
|
||||||
class UptimeFormatterFactory
|
class UptimeFormatterFactory
|
||||||
: public logger::basic_formatter_factory<char, ptime::time_duration>
|
: public logging::basic_formatter_factory<char, ptime::time_duration>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
formatter_type create_formatter (logger::attribute_name const& name, args_map const& args)
|
formatter_type create_formatter (logging::attribute_name const& name, args_map const& args)
|
||||||
{
|
{
|
||||||
args_map::const_iterator it = args.find ("format");
|
args_map::const_iterator it = args.find ("format");
|
||||||
if (it != args.end ())
|
if (it != args.end ())
|
||||||
@ -100,26 +98,21 @@ namespace Logger
|
|||||||
public:
|
public:
|
||||||
CommonInitialization ()
|
CommonInitialization ()
|
||||||
{
|
{
|
||||||
// Disable all exceptions
|
|
||||||
logger::core::get ()->set_exception_handler (logger::make_exception_suppressor ());
|
|
||||||
|
|
||||||
// Add common attributes: LineID, TimeStamp, ProcessID, ThreadID
|
// Add common attributes: LineID, TimeStamp, ProcessID, ThreadID
|
||||||
logger::add_common_attributes ();
|
logging::add_common_attributes ();
|
||||||
// Add boost log timer as global attribute Uptime
|
// Add boost log timer as global attribute Uptime
|
||||||
logger::core::get ()->add_global_attribute ("Uptime", attrs::timer ());
|
logging::core::get ()->add_global_attribute ("Uptime", attrs::timer ());
|
||||||
// Allows %Severity% to be used in ini config file for property Filter.
|
// Allows %Severity% to be used in ini config file for property Filter.
|
||||||
logger::register_simple_filter_factory<logger::trivial::severity_level, char> ("Severity");
|
logging::register_simple_filter_factory<logging::trivial::severity_level, char> ("Severity");
|
||||||
// Allows %Severity% to be used in ini config file for property Format.
|
// Allows %Severity% to be used in ini config file for property Format.
|
||||||
logger::register_simple_formatter_factory<logger::trivial::severity_level, char> ("Severity");
|
logging::register_simple_formatter_factory<logging::trivial::severity_level, char> ("Severity");
|
||||||
// Allows %TimeStamp(format=\"%Y.%m.%d %H:%M:%S.%f\")% to be used in ini config file for property Format.
|
// Allows %TimeStamp(format=\"%Y.%m.%d %H:%M:%S.%f\")% to be used in ini config file for property Format.
|
||||||
logger::register_formatter_factory ("TimeStamp", boost::make_shared<TimeStampFormatterFactory> ());
|
logging::register_formatter_factory ("TimeStamp", boost::make_shared<TimeStampFormatterFactory> ());
|
||||||
// Allows %Uptime(format=\"%O:%M:%S.%f\")% to be used in ini config file for property Format.
|
// Allows %Uptime(format=\"%O:%M:%S.%f\")% to be used in ini config file for property Format.
|
||||||
logger::register_formatter_factory ("Uptime", boost::make_shared<UptimeFormatterFactory> ());
|
logging::register_formatter_factory ("Uptime", boost::make_shared<UptimeFormatterFactory> ());
|
||||||
}
|
}
|
||||||
~CommonInitialization ()
|
~CommonInitialization ()
|
||||||
{
|
{
|
||||||
// Indicate start of logging
|
|
||||||
LOG_INFO ("Log Start");
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -127,9 +120,6 @@ namespace Logger
|
|||||||
void init ()
|
void init ()
|
||||||
{
|
{
|
||||||
CommonInitialization ci;
|
CommonInitialization ci;
|
||||||
// auto sink = boost::make_shared<sinks::synchronous_sink<sinks::debug_output_backend>> ();
|
|
||||||
// sink->set_filter (expr::is_debugger_present ());
|
|
||||||
// logger::core::get ()->add_sink (sink);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_from_config (std::istream& stream)
|
void init_from_config (std::istream& stream)
|
||||||
@ -138,7 +128,7 @@ namespace Logger
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Still can throw even with the exception suppressor above.
|
// Still can throw even with the exception suppressor above.
|
||||||
logger::init_from_stream (stream);
|
logging::init_from_stream (stream);
|
||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
@ -153,7 +143,7 @@ namespace Logger
|
|||||||
|
|
||||||
void disable ()
|
void disable ()
|
||||||
{
|
{
|
||||||
logger::core::get ()->set_logging_enabled (false);
|
logging::core::get ()->set_logging_enabled (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_datafile_log (std::string const& log_file_name)
|
void add_datafile_log (std::string const& log_file_name)
|
||||||
@ -175,15 +165,15 @@ namespace Logger
|
|||||||
// The log output formatter
|
// The log output formatter
|
||||||
sink->set_formatter (expr::format ("[%1%][%2%] %3%")
|
sink->set_formatter (expr::format ("[%1%][%2%] %3%")
|
||||||
% expr::attr<ptime::ptime> ("TimeStamp")
|
% expr::attr<ptime::ptime> ("TimeStamp")
|
||||||
% logger::trivial::severity
|
% logging::trivial::severity
|
||||||
% expr::smessage
|
% expr::smessage
|
||||||
);
|
);
|
||||||
|
|
||||||
// Filter by severity and by DATALOG channel
|
// Filter by severity and by DATALOG channel
|
||||||
sink->set_filter (logger::trivial::severity >= logger::trivial::info &&
|
sink->set_filter (logging::trivial::severity >= logging::trivial::info &&
|
||||||
expr::attr<std::string> ("Channel") == "DATALOG");
|
expr::attr<std::string> ("Channel") == "DATALOG");
|
||||||
|
|
||||||
// Add it to the core
|
// Add it to the core
|
||||||
logger::core::get ()->add_sink (sink);
|
logging::core::get ()->add_sink (sink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user