//
// log.cpp
//
// Copyright (c) 2019 2020 Andrea Bondavalli. All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include
#include
#include
#include
#include
#include
#include
#include "config.hpp"
#include "log.hpp"
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
using sink_t = sinks::synchronous_sink;
void log_init(const Config& config) {
boost::shared_ptr core = logging::core::get();
// remove all sink in case of re-configuration
core->remove_all_sinks();
// set log level
core->set_filter(logging::trivial::severity >= config.get_log_severity());
/* if proto is none, syslog is disable, logging on stdout */
if (config.get_syslog_proto() != "none") {
boost::shared_ptr backend;
/* if proto is udp, syslog_server address is used */
if (config.get_syslog_proto() == "udp") {
backend = boost::make_shared(
keywords::facility = sinks::syslog::local0,
keywords::use_impl = sinks::syslog::udp_socket_based);
std::vector address;
boost::split(address, config.get_syslog_server(), boost::is_any_of(":"));
if (address.size() == 2) {
// Setup the target address and port to send syslog messages to
backend->set_target_address(address[0],
boost::lexical_cast(address[1]));
}
} else {
/* if proto is local, local syslog is used */
backend = boost::make_shared(
keywords::facility = sinks::syslog::user,
keywords::use_impl = sinks::syslog::native);
}
// Create and fill in another level translator for "MyLevel" attribute of
// type string
sinks::syslog::custom_severity_mapping mapping("MyLevel");
mapping["debug"] = sinks::syslog::debug;
mapping["normal"] = sinks::syslog::info;
mapping["warning"] = sinks::syslog::warning;
mapping["failure"] = sinks::syslog::critical;
backend->set_severity_mapper(mapping);
// Wrap it into the frontend and register in the core.
core->add_sink(boost::make_shared(backend));
}
}