summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/log/example/keywords
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/log/example/keywords')
-rw-r--r--src/boost/libs/log/example/keywords/Jamfile.v258
-rw-r--r--src/boost/libs/log/example/keywords/main.cpp133
2 files changed, 191 insertions, 0 deletions
diff --git a/src/boost/libs/log/example/keywords/Jamfile.v2 b/src/boost/libs/log/example/keywords/Jamfile.v2
new file mode 100644
index 00000000..54db6e11
--- /dev/null
+++ b/src/boost/libs/log/example/keywords/Jamfile.v2
@@ -0,0 +1,58 @@
+#
+# Copyright Andrey Semashev 2007 - 2015.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+
+import ../../build/log-platform-config ;
+
+project
+ : requirements
+ <conditional>@log-platform-config.set-platform-defines
+
+ <link>shared:<define>BOOST_ALL_DYN_LINK
+ <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
+ <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
+ <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
+ <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+ <toolset>msvc:<cxxflags>/bigobj
+ <toolset>msvc:<cxxflags>/wd4503 # decorated name length exceeded, name was truncated
+ <toolset>msvc:<cxxflags>/wd4456 # declaration of 'A' hides previous local declaration
+ <toolset>msvc:<cxxflags>/wd4459 # declaration of 'A' hides global declaration
+ <toolset>msvc:<cxxflags>/wd4003 # not enough actual parameters for macro 'X' - caused by BOOST_PP_IS_EMPTY and BOOST_PP_IS_BEGIN_PARENS which are used by Fusion
+ <toolset>intel-win:<define>_SCL_SECURE_NO_WARNINGS
+ <toolset>intel-win:<define>_SCL_SECURE_NO_DEPRECATE
+ <toolset>intel-win:<define>_CRT_SECURE_NO_WARNINGS
+ <toolset>intel-win:<define>_CRT_SECURE_NO_DEPRECATE
+ <toolset>darwin:<cxxflags>-ftemplate-depth-1024
+ <toolset>gcc:<cxxflags>-ftemplate-depth-1024
+ <toolset>gcc:<cxxflags>-fno-strict-aliasing # avoids strict aliasing violations in other Boost components
+
+ # Disable Intel warnings:
+ # warning #177: function "X" was declared but never referenced
+ # warning #780: using-declaration ignored -- it refers to the current namespace
+ # warning #2196: routine is both "inline" and "noinline"
+ # remark #1782: #pragma once is obsolete. Use #ifndef guard instead.
+ # remark #193: zero used for undefined preprocessing identifier "X"
+ # remark #304: access control not specified ("public" by default)
+ # remark #981: operands are evaluated in unspecified order
+ # remark #1418: external function definition with no prior declaration
+ # Mostly comes from Boost.Phoenix: warning #411: class "X" defines no constructor to initialize the following: reference member "Y"...
+ # warning #734: "X" (declared at line N of "file.hpp"), required for copy that was eliminated, is inaccessible
+ # warning #279: controlling expression is constant
+ <toolset>intel-win:<cxxflags>"/Qwd177,780,2196,1782,193,304,981,1418,411,734,279"
+ <toolset>intel-linux:<cxxflags>"-wd177,780,2196,1782,193,304,981,1418,411,734,279"
+ <toolset>intel-darwin:<cxxflags>"-wd177,780,2196,1782,193,304,981,1418,411,734,279"
+
+ <library>/boost/log//boost_log
+ <library>/boost/log//boost_log_setup
+ <library>/boost/date_time//boost_date_time
+ <library>/boost/filesystem//boost_filesystem
+ <threading>single:<define>BOOST_LOG_NO_THREADS
+ <threading>multi:<library>/boost/thread//boost_thread
+ ;
+
+exe keywords
+ : main.cpp
+ ;
diff --git a/src/boost/libs/log/example/keywords/main.cpp b/src/boost/libs/log/example/keywords/main.cpp
new file mode 100644
index 00000000..5271f95a
--- /dev/null
+++ b/src/boost/libs/log/example/keywords/main.cpp
@@ -0,0 +1,133 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file main.cpp
+ * \author Andrey Semashev
+ * \date 01.12.2012
+ *
+ * \brief An example of using attribute keywords.
+ */
+
+// #define BOOST_LOG_USE_CHAR
+// #define BOOST_ALL_DYN_LINK 1
+// #define BOOST_LOG_DYN_LINK 1
+
+#include <iostream>
+
+#include <boost/log/common.hpp>
+#include <boost/log/expressions.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/attributes/timer.hpp>
+#include <boost/log/attributes/named_scope.hpp>
+
+#include <boost/log/sources/logger.hpp>
+
+#include <boost/log/support/date_time.hpp>
+
+namespace logging = boost::log;
+namespace sinks = boost::log::sinks;
+namespace attrs = boost::log::attributes;
+namespace src = boost::log::sources;
+namespace expr = boost::log::expressions;
+namespace keywords = boost::log::keywords;
+
+using boost::shared_ptr;
+
+// Here we define our application severity levels.
+enum severity_level
+{
+ normal,
+ notification,
+ warning,
+ error,
+ critical
+};
+
+// The formatting logic for the severity level
+template< typename CharT, typename TraitsT >
+inline std::basic_ostream< CharT, TraitsT >& operator<< (
+ std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl)
+{
+ static const char* const str[] =
+ {
+ "normal",
+ "notification",
+ "warning",
+ "error",
+ "critical"
+ };
+ if (static_cast< std::size_t >(lvl) < (sizeof(str) / sizeof(*str)))
+ strm << str[lvl];
+ else
+ strm << static_cast< int >(lvl);
+ return strm;
+}
+
+// Declare attribute keywords
+BOOST_LOG_ATTRIBUTE_KEYWORD(_severity, "Severity", severity_level)
+BOOST_LOG_ATTRIBUTE_KEYWORD(_timestamp, "TimeStamp", boost::posix_time::ptime)
+BOOST_LOG_ATTRIBUTE_KEYWORD(_uptime, "Uptime", attrs::timer::value_type)
+BOOST_LOG_ATTRIBUTE_KEYWORD(_scope, "Scope", attrs::named_scope::value_type)
+
+int main(int argc, char* argv[])
+{
+ // This is a simple tutorial/example of Boost.Log usage
+
+ // The first thing we have to do to get using the library is
+ // to set up the logging sinks - i.e. where the logs will be written to.
+ logging::add_console_log(std::clog, keywords::format = "%TimeStamp%: %_%");
+
+ // One can also use lambda expressions to setup filters and formatters
+ logging::add_file_log
+ (
+ "sample.log",
+ keywords::filter = _severity >= warning,
+ keywords::format = expr::stream
+ << expr::format_date_time(_timestamp, "%Y-%m-%d, %H:%M:%S.%f")
+ << " [" << expr::format_date_time(_uptime, "%O:%M:%S")
+ << "] [" << expr::format_named_scope(_scope, keywords::format = "%n (%f:%l)")
+ << "] <" << _severity
+ << "> " << expr::message
+/*
+ keywords::format = expr::format("%1% [%2%] [%3%] <%4%> %5%")
+ % expr::format_date_time(_timestamp, "%Y-%m-%d, %H:%M:%S.%f")
+ % expr::format_date_time(_uptime, "%O:%M:%S")
+ % expr::format_named_scope(_scope, keywords::format = "%n (%f:%l)")
+ % _severity
+ % expr::message
+*/
+ );
+
+ // Also let's add some commonly used attributes, like timestamp and record counter.
+ logging::add_common_attributes();
+ logging::core::get()->add_thread_attribute("Scope", attrs::named_scope());
+
+ BOOST_LOG_FUNCTION();
+
+ // Now our logs will be written both to the console and to the file.
+ // Let's do a quick test and output something. We have to create a logger for this.
+ src::logger lg;
+
+ // And output...
+ BOOST_LOG(lg) << "Hello, World!";
+
+ // Now, let's try logging with severity
+ src::severity_logger< severity_level > slg;
+
+ // Let's pretend we also want to profile our code, so add a special timer attribute.
+ slg.add_attribute("Uptime", attrs::timer());
+
+ BOOST_LOG_SEV(slg, normal) << "A normal severity message, will not pass to the file";
+ BOOST_LOG_SEV(slg, warning) << "A warning severity message, will pass to the file";
+ BOOST_LOG_SEV(slg, error) << "An error severity message, will pass to the file";
+
+ return 0;
+}