Add logging facility
This commit is contained in:
92
src/log/Log.cpp
Normal file
92
src/log/Log.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* @file Log.cpp
|
||||
* @author Jun <jun@firmwarejun.net>
|
||||
* @brief Logging utilities
|
||||
* @version 0.1
|
||||
* @date 2023-10-06
|
||||
*
|
||||
* Copyright (c) 2023 jun <https://git.firmwarejun.net/jun/MolecularDynamics2>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Log.hpp"
|
||||
|
||||
#include <boost/core/null_deleter.hpp>
|
||||
#include <boost/date_time/posix_time/posix_time_types.hpp>
|
||||
#include <boost/log/sinks/sync_frontend.hpp>
|
||||
#include <boost/log/sinks/text_ostream_backend.hpp>
|
||||
#include <boost/log/support/date_time.hpp>
|
||||
#include <boost/log/utility/setup/common_attributes.hpp>
|
||||
#include <boost/log/utility/setup/formatter_parser.hpp>
|
||||
|
||||
#include <boost/log/core.hpp>
|
||||
#include <boost/log/expressions.hpp>
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
namespace logging = boost::log;
|
||||
namespace expr = boost::log::expressions;
|
||||
|
||||
void my_formatter(logging::record_view const &rec,
|
||||
logging::formatting_ostream &strm) {
|
||||
auto severity = rec[logging::trivial::severity];
|
||||
|
||||
auto white = "\033[37m";
|
||||
auto red = "\033[31m";
|
||||
auto green = "\033[32m";
|
||||
auto yellow = "\033[33m";
|
||||
auto blue = "\033[34m";
|
||||
auto orange = "\033[35m";
|
||||
auto cyan = "\033[36m";
|
||||
auto clear = "\033[0m";
|
||||
|
||||
auto severityColor = white;
|
||||
|
||||
if (severity) {
|
||||
// Set the color
|
||||
switch (severity.get()) {
|
||||
case logging::trivial::severity_level::info:
|
||||
severityColor = cyan;
|
||||
break;
|
||||
case logging::trivial::severity_level::warning:
|
||||
severityColor = yellow;
|
||||
break;
|
||||
case logging::trivial::severity_level::error:
|
||||
case logging::trivial::severity_level::fatal:
|
||||
severityColor = red;
|
||||
break;
|
||||
default:
|
||||
// White
|
||||
severityColor = white;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
strm << "[" << logging::extract<boost::posix_time::ptime>("TimeStamp", rec)
|
||||
<< "]";
|
||||
|
||||
strm << severityColor << "[" << severity.get() << "] " << rec[expr::smessage]
|
||||
<< clear;
|
||||
}
|
||||
|
||||
void setupLogging() {
|
||||
namespace sinks = boost::log::sinks;
|
||||
namespace attrs = boost::log::attributes;
|
||||
namespace keywords = boost::log::keywords;
|
||||
|
||||
boost::shared_ptr<sinks::text_ostream_backend> backend =
|
||||
boost::make_shared<sinks::text_ostream_backend>();
|
||||
|
||||
backend->add_stream(
|
||||
boost::shared_ptr<std::ostream>(&std::clog, boost::null_deleter()));
|
||||
|
||||
// typedef sinks::synchronous_sink<ColorSink> sink_t;
|
||||
typedef sinks::synchronous_sink<sinks::text_ostream_backend> sink_t;
|
||||
|
||||
boost::shared_ptr<sink_t> sink(new sink_t(backend));
|
||||
|
||||
sink->set_formatter(&my_formatter);
|
||||
sink->locked_backend()->auto_flush(true);
|
||||
|
||||
logging::add_common_attributes();
|
||||
logging::core::get()->add_sink(sink);
|
||||
}
|
||||
17
src/log/Log.hpp
Normal file
17
src/log/Log.hpp
Normal file
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* @file Log.hpp
|
||||
* @author Jun <jun@firmwarejun.net>
|
||||
* @brief Logging utilities
|
||||
* @version 0.1
|
||||
* @date 2023-10-06
|
||||
*
|
||||
* Copyright (c) 2023 jun <https://git.firmwarejun.net/jun/MolecularDynamics2>
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <boost/log/sinks/basic_sink_backend.hpp>
|
||||
#include <boost/log/sinks/sync_frontend.hpp>
|
||||
|
||||
void setupLogging();
|
||||
Reference in New Issue
Block a user