19 #include <boost/log/expressions/attr_fwd.hpp>
20 #include <boost/log/expressions/attr.hpp>
21 #include <boost/log/expressions/formatters/date_time.hpp>
22 #include <boost/log/keywords/channel.hpp>
23 #include <boost/log/sources/severity_channel_logger.hpp>
24 #include <boost/log/sources/record_ostream.hpp>
25 #include <boost/log/support/date_time.hpp>
26 #include <boost/log/utility/setup/console.hpp>
27 #include <boost/log/utility/setup/file.hpp>
28 #include <boost/log/utility/setup/common_attributes.hpp>
30 #include <ubuntu/download_manager/download_struct.h>
33 typedef boost::log::sources::severity_channel_logger_mt<
38 const std::string DOWNLOAD_MANAGER_CHANNEL =
"ubuntu_download_manager";
39 void my_formatter(boost::log::record_view
const& rec,
40 boost::log::formatting_ostream& strm) {
43 strm << boost::log::extract<unsigned int>(
"LineID", rec) <<
" [";
44 strm << boost::log::extract<boost::posix_time::ptime>(
"TimeStamp", rec) <<
"] ";
45 strm << boost::log::extract<std::string>(
"Channel", rec) <<
" [";
46 auto severity = boost::log::extract<Logger::Level>(
"Severity", rec).
get();
54 case Logger::Notification:
55 strm <<
"Notification";
69 strm << rec[boost::log::expressions::smessage];
75 namespace DownloadManager {
85 boost::log::add_common_attributes();
88 boost::log::keywords::channel = DOWNLOAD_MANAGER_CHANNEL,
89 boost::log::keywords::severity = lvl);
92 auto sink = boost::log::add_file_log(
93 boost::log::keywords::file_name = path.toStdString(),
94 boost::log::keywords::auto_flush = true
97 sink->set_formatter(&my_formatter);
101 boost::log::expressions::attr<std::string>(
"Channel") == DOWNLOAD_MANAGER_CHANNEL
105 log(Logger::Critical,
"Logger init called more than once.");
110 if (_lg !=
nullptr) {
111 auto rec = _lg->open_record(boost::log::keywords::severity = lvl);
113 boost::log::record_ostream strm(rec);
114 strm << msg.toStdString();
116 _lg->push_record(boost::move(rec));
122 auto msg = msgList.join(
" ");
126 void log(
Logger::Level lvl,
const QString& msg, QMap<QString, QString> map) {
127 auto fmtMsg = msg.arg(toString(map));
131 void log(
Logger::Level lvl,
const QString& msg, QMap<QString, QVariant> map) {
132 auto fmtMsg = msg.arg(toString(map));
136 void log(
Logger::Level lvl,
const QString& msg, DownloadStruct downStruct) {
139 list <<
"\n\t\tUrl: " << downStruct.getUrl()
140 <<
"\n\t\tHash Algorithm: '" << downStruct.getAlgorithm() <<
"'"
141 <<
"\n\t\tMetadata: " << toString(downStruct.getMetadata())
142 <<
"\n\t\tHeaders: " << toString(downStruct.getHeaders());
144 auto fmtMsg = msg.arg(list.join(
""));
149 QString toString(QMap<QString, QString> map) {
152 int index = map.keys().count();
153 foreach(
const QString& key, map.keys()) {
154 list <<
"'" << key <<
"': '" << map[key] <<
"'";
161 return list.join(
"");
164 QString toString(QVariantMap map) {
167 int index = map.keys().count();
168 foreach(
const QString& key, map.keys()) {
169 list <<
"'" << key <<
"': '"
170 << map[key].toString() <<
"'";
177 return list.join(
"");
184 LoggerPrivate* Logger::_private =
new LoggerPrivate();
185 QMutex Logger::_mutex;
190 _private->init(lvl, path);
196 _private->log(lvl, msg);
201 _private->log(lvl, msg);
205 Logger::log(Level lvl,
const QString& msg, QMap<QString, QString> map) {
206 _private->log(lvl, msg, map);
210 Logger::log(Level lvl,
const QString& msg, QMap<QString, QVariant> map) {
211 _private->log(lvl, msg, map);
215 Logger::log(Level lvl,
const QString& msg, DownloadStruct downStruct) {
216 _private->log(lvl, msg, downStruct);
boost::log::sources::severity_channel_logger_mt< Ubuntu::DownloadManager::Logging::Logger::Level, std::string > logger_mt