【问题标题】:Boost syslog to a specific file using syslog sink使用 syslog sink 将 syslog 提升到特定文件
【发布时间】:2017-12-11 14:39:53
【问题描述】:

在 debian9 上使用 syslog 后端时,是否可以配置 boost log 以将日志发送到特定文件。以下代码初始化我的日志接收器:

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);

【问题讨论】:

    标签: c++ logging boost


    【解决方案1】:

    系统日志 API(和协议)不允许应用程序指定日志服务器处理日志的方式。为此,您必须配置系统日志服务器。请参阅您的服务器的文档(例如,rsyslogsyslog-ngjournald 以通过 syslog API 进行日志记录)。

    如果您真的想在应用程序中配置目标文件名,那么您必须从应用程序中写入文件。 text_file_backend sink 后端将帮助您做到这一点。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多