Last active
September 11, 2022 01:39
-
-
Save xiongjia/e23b9572d3fc3d677e3d to your computer and use it in GitHub Desktop.
A simple sample of Boost Log #devsample #boost
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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