Skip to content

Instantly share code, notes, and snippets.

@xiongjia
Last active September 11, 2022 01:39
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save xiongjia/e23b9572d3fc3d677e3d to your computer and use it in GitHub Desktop.
Save xiongjia/e23b9572d3fc3d677e3d to your computer and use it in GitHub Desktop.
A simple sample of Boost Log #devsample #boost
/**
* A simple sample of Boost Log
*/
#pragma warning(push)
#pragma warning(disable:4819)
# include <boost/shared_ptr.hpp>
# include <boost/date_time/posix_time/posix_time_types.hpp>
# include <boost/log/trivial.hpp>
# include <boost/log/core.hpp>
# include <boost/log/expressions.hpp>
# include <boost/log/sources/logger.hpp>
# include <boost/log/utility/setup/file.hpp>
# include <boost/log/utility/setup/console.hpp>
# include <boost/log/utility/setup/common_attributes.hpp>
# include <boost/log/support/date_time.hpp>
# include <boost/log/sinks/sync_frontend.hpp>
# include <boost/log/sinks/text_file_backend.hpp>
# include <boost/log/sinks/text_ostream_backend.hpp>
# include <boost/log/attributes/named_scope.hpp>
#pragma warning(pop)
#pragma warning(disable:4503)
static void init_log(void)
{
/* init boost log
* 1. Add common attributes
* 2. set log filter to trace
*/
boost::log::add_common_attributes();
boost::log::core::get()->add_global_attribute("Scope",
boost::log::attributes::named_scope());
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::trace
);
/* log formatter:
* [TimeStamp] [ThreadId] [Severity Level] [Scope] Log message
*/
auto fmtTimeStamp = boost::log::expressions::
format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f");
auto fmtThreadId = boost::log::expressions::
attr<boost::log::attributes::current_thread_id::value_type>("ThreadID");
auto fmtSeverity = boost::log::expressions::
attr<boost::log::trivial::severity_level>("Severity");
auto fmtScope = boost::log::expressions::format_named_scope("Scope",
boost::log::keywords::format = "%n(%f:%l)",
boost::log::keywords::iteration = boost::log::expressions::reverse,
boost::log::keywords::depth = 2);
boost::log::formatter logFmt =
boost::log::expressions::format("[%1%] (%2%) [%3%] [%4%] %5%")
% fmtTimeStamp % fmtThreadId % fmtSeverity % fmtScope
% boost::log::expressions::smessage;
/* console sink */
auto consoleSink = boost::log::add_console_log(std::clog);
consoleSink->set_formatter(logFmt);
/* fs sink */
auto fsSink = boost::log::add_file_log(
boost::log::keywords::file_name = "test_%Y-%m-%d_%H-%M-%S.%N.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::min_free_space = 30 * 1024 * 1024,
boost::log::keywords::open_mode = std::ios_base::app);
fsSink->set_formatter(logFmt);
fsSink->locked_backend()->auto_flush(true);
}
static void Test(void)
{
BOOST_LOG_FUNCTION();
BOOST_LOG_TRIVIAL(info) << "Info Log in Test()";
}
int main(int argc, char **argv)
{
init_log();
BOOST_LOG_NAMED_SCOPE("main");
BOOST_LOG_TRIVIAL(info) << "Info Log";
Test();
BOOST_LOG_TRIVIAL(info) << "app exiting";
return 0;
}
# CMake build script
cmake_minimum_required(VERSION 2.8)
# project name & version
project(ProgLogTest)
# common settings (Boost libraries)
if (MSVC)
# Enable the static libraries on Windows
foreach (flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
# update to the static version of the run time library
string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endforeach()
set(CMAKE_C_STANDARD_LIBRARIES "")
set(CMAKE_CXX_STANDARD_LIBRARIES "")
endif()
# enable boost static flag
unset(Boost_LIBRARIES)
set(Boost_USE_STATIC ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME ON)
# boost components
find_package(Boost REQUIRED COMPONENTS
log log_setup system filesystem date_time thread chrono)
include_directories("${PROJECT_SOURCE_DIR}"
"${Boost_INCLUDE_DIRS}")
set(proglog_dbg_libs
"${Boost_LOG_LIBRARY_DEBUG}"
"${Boost_LOG_SETUP_LIBRARY_DEBUG}"
"${Boost_THREAD_LIBRARY_DEBUG}"
"${Boost_DATE_TIME_LIBRARY_DEBUG}"
"${Boost_CHRONO_LIBRARY_DEBUG}"
"${Boost_FILESYSTEM_LIBRARY_DEBUG}"
"${Boost_SYSTEM_LIBRARY_DEBUG}")
set(proglog_opt_libs
"${Boost_LOG_LIBRARY_RELEASE}"
"${Boost_LOG_SETUP_LIBRARY_RELEASE}"
"${Boost_THREAD_LIBRARY_RELEASE}"
"${Boost_DATE_TIME_LIBRARY_RELEASE}"
"${Boost_CHRONO_LIBRARY_RELEASE}"
"${Boost_FILESYSTEM_LIBRARY_RELEASE}"
"${Boost_SYSTEM_LIBRARY_RELEASE}")
add_executable(prog-log
"${PROJECT_SOURCE_DIR}/0_main.cxx")
target_link_libraries(prog-log
debug "${proglog_dbg_libs}"
optimized "${proglog_opt_libs}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment