2017-12-11 29 views
0

debian9でsyslogバックエンドを使用するときに、ブーストログを設定して特定のファイルにログを送信することは可能ですか?syslogシンクを使用して特定のファイルにsyslogを昇格する

namespace logging = boost::log; 
namespace sinks = boost::log::sinks; 
namespace keywords = boost::log::keywords; 
using namespace boost::log::sinks::syslog; 

boost::shared_ptr<logging::core> core = logging::core::get(); 

boost::shared_ptr<sinks::syslog_backend> backend = 
    boost::make_shared<sinks::syslog_backend>(
     keywords::use_impl = sinks::syslog::udp_socket_based, 
     keywords::facility = sinks::syslog::local0 
    ); 


// Create and fill in another level translator for "MyLevel" attribute of type string 
sinks::syslog::custom_severity_mapping<std::string> mapping("MyLevel"); 
mapping["debug"] = sinks::syslog::debug; 
mapping["info"] = sinks::syslog::info; 
mapping["warning"] = sinks::syslog::warning; 
mapping["error"] = sinks::syslog::error; 
backend->set_severity_mapper(mapping); 
backend->set_target_address("localhost"); 

// Wrap it into the frontend and register in the core. 
// The backend requires synchronization in the frontend. 
typedef sinks::synchronous_sink<sinks::syslog_backend> sink_t; 
boost::shared_ptr<sink_t> sink(new sink_t(backend)); 

core->add_sink(sink); 

答えて

1

のsyslog API(およびプロトコル)アプリケーションは、ログは、ログサーバーによって処理されているかの方法を指定することはできません:次のコードは、私のログシンクが初期化されます。そのためには、syslogサーバーを設定する必要があります。サーバーのドキュメントを参照してください(例:rsyslogsyslog-ngまたはjournald)。

実際にアプリケーションでターゲットファイル名を設定する場合は、アプリケーションからファイルを書き込む必要があります。 text_file_backendシンクのバックエンドがこれを行うのに役立ちます。

関連する問題