私は基本的なboost example from hereに取り組んでいます。私は自分のアプリケーションに必要なものを設定していますが、私は立ち往生しています。私は今どこにいるのですか:Boost :: log:レベルに基づいた異なるフォーマット(HTMLフォーマット)
#include <fstream>
#include <iomanip>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/smart_ptr/make_shared_object.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/sync_frontend.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
void init()
{
typedef sinks::synchronous_sink<sinks::text_ostream_backend> text_sink;
boost::log::core::get()->add_global_attribute("TimeStamp", boost::log::attributes::utc_clock());
boost::shared_ptr<text_sink> sink = boost::make_shared<text_sink>();
sink->locked_backend()->add_stream(
boost::make_shared<std::ofstream>("log.html"));
sink->set_formatter
(
expr::stream
<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y.%m.%d-%H:%M:%S-UTC")
<< ": <" << logging::trivial::severity << "> " << expr::smessage
);
logging::core::get()->add_sink(sink);
}
int main(int, char*[])
{
std::cout<<"Start"<<std::endl;
init();
logging::add_common_attributes();
using namespace logging::trivial;
src::severity_logger<severity_level> lg;
BOOST_LOG_SEV(lg, trace) << "A trace severity message";
BOOST_LOG_SEV(lg, debug) << "A debug severity message";
BOOST_LOG_SEV(lg, info) << "An informational severity message";
BOOST_LOG_SEV(lg, warning) << "A warning severity message";
BOOST_LOG_SEV(lg, error) << "An error severity message";
BOOST_LOG_SEV(lg, fatal) << "A fatal severity message";
std::cout<<"End"<<std::endl;
return 0;
}
私はフォーマットを重大度に依存させたいと思います。これは、私のログ出力がHTMLであるためです。例えば、メッセージは、私は、ファイルに次のようにメインアップがなければならない出力に出力します。
<font color='black'>A trace severity message</font>
<font color='gray'>A debug severity message</font>
<font color='blue'>An informational severity message</font>
<font color='orange'>A warning severity message</font>
<font color='red'>An error severity message</font>
<strong><font color='red'>A fatal severity message</font></strong>
が、これは私がそこに持っている単純なモデルでは可能ですか?何がかかりますか?
sink->set_formatter()
にif
の条件を挿入します。私はそこでC++ 11ラムダを使うこともできませんでした。
ありがとうございました。私はそれを実装しようとしています。その 'string_view'はブースト1.55ではありません、そうですか?私はDebian Jessieにあり、 '/ usr /'ディレクトリ全体でgrepで見つけることができませんでした。 –
いいえ、後で追加されました。代わりに 'boost :: string_ref'や' std :: string'を使うことができます。 –
ありがとうございました。私はそれを知らなかった。実際に今朝私は 'string_view'について読んで、それが何であるかを学びました。一方、私は自分の問題に対する解決策を見つけ、別の答えでそれを書いた。私はあなたから多くを学んだので、これを+1しています:)もう一度ありがとう! –