C++ 提升日志严重性级别与系统日志严重性级别

C++ 提升日志严重性级别与系统日志严重性级别,c++,boost,boost-log,C++,Boost,Boost Log,我正在尝试修改我的应用程序以使用Boost日志库,而不是登录到syslog。Boost日志严重性级别在Boost/Log/triple.hpp中定义,其中最严重的级别具有最大数字(5): 但是,定义了更多的严重性级别,这些级别实际上是由-标准化的,并且最严重的级别具有最小值数字(0) 有没有办法定义我自己的MySeverityLevels枚举类型(可能接近RFC5424)并将各种Boost日志记录器(severity\u logger)与此新类型一起使用,包括按严重性级别过滤?/libs/Log

我正在尝试修改我的应用程序以使用Boost日志库,而不是登录到
syslog
。Boost日志严重性级别在
Boost/Log/triple.hpp
中定义,其中最严重的级别具有最大数字(5):

但是,定义了更多的严重性级别,这些级别实际上是由-标准化的,并且最严重的级别具有最小值数字(0)

有没有办法定义我自己的
MySeverityLevels
枚举类型(可能接近RFC5424)并将各种Boost日志记录器(
severity\u logger
)与此新类型一起使用,包括按严重性级别过滤?

/libs/Log/example/native\u syslog
包含自定义日志级别的示例,即,为您的严重性级别创建枚举:

//! Define application-specific severity levels
enum severity_levels
{
    /* your own level */
    normal = 2,
    warning = 1,
    error = 0
};
把它放在你的水槽里

    // Create a syslog sink
    shared_ptr< sinks::synchronous_sink< sinks::syslog_backend > > sink(
        new sinks::synchronous_sink< sinks::syslog_backend >(
            keywords::use_impl = sinks::syslog::native,
            keywords::facility = sinks::syslog::local7));
     ........................
    // We'll have to map our custom levels to the syslog levels
    sinks::syslog::custom_severity_mapping< severity_levels > mapping("Severity");
    mapping[normal] = sinks::syslog::info;
    mapping[warning] = sinks::syslog::warning;
    mapping[error] = sinks::syslog::critical;

    sink->locked_backend()->set_severity_mapper(mapping);

    // Add the sink to the core
    logging::core::get()->add_sink(sink);
//创建系统日志接收器
共享\u ptr>sink(
新接收器::同步接收器<接收器::系统日志\u后端>(
关键词::use_impl=sinks::syslog::native,
关键词::facility=sinks::syslog::local7);
........................
//我们必须将自定义级别映射到系统日志级别
汇::syslog::自定义严重性映射<严重性级别>映射(“严重性”);
映射[normal]=sinks::syslog::info;
映射[warning]=sinks::syslog::warning;
映射[error]=sinks::syslog::critical;
接收器->锁定的\u后端()->设置\u严重性\u映射器(映射);
//将水槽添加到核心
logging::core::get()->add_sink(sink);
/libs/log/example/native\u syslog
包含自定义日志级别的示例,即为您的严重性级别创建枚举:

//! Define application-specific severity levels
enum severity_levels
{
    /* your own level */
    normal = 2,
    warning = 1,
    error = 0
};
把它放在你的水槽里

    // Create a syslog sink
    shared_ptr< sinks::synchronous_sink< sinks::syslog_backend > > sink(
        new sinks::synchronous_sink< sinks::syslog_backend >(
            keywords::use_impl = sinks::syslog::native,
            keywords::facility = sinks::syslog::local7));
     ........................
    // We'll have to map our custom levels to the syslog levels
    sinks::syslog::custom_severity_mapping< severity_levels > mapping("Severity");
    mapping[normal] = sinks::syslog::info;
    mapping[warning] = sinks::syslog::warning;
    mapping[error] = sinks::syslog::critical;

    sink->locked_backend()->set_severity_mapper(mapping);

    // Add the sink to the core
    logging::core::get()->add_sink(sink);
//创建系统日志接收器
共享\u ptr>sink(
新接收器::同步接收器<接收器::系统日志\u后端>(
关键词::use_impl=sinks::syslog::native,
关键词::facility=sinks::syslog::local7);
........................
//我们必须将自定义级别映射到系统日志级别
汇::syslog::自定义严重性映射<严重性级别>映射(“严重性”);
映射[normal]=sinks::syslog::info;
映射[warning]=sinks::syslog::warning;
映射[error]=sinks::syslog::critical;
接收器->锁定的\u后端()->设置\u严重性\u映射器(映射);
//将水槽添加到核心
logging::core::get()->add_sink(sink);

我在回答我自己的问题。下面的代码实现了我想要的:

#include <boost/log/common.hpp>
#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace keywords = boost::log::keywords;

enum class MySeverityLevel
{
  panic,
  alert,
  critical,
  error,
  warning,
  notice,
  info,
  debug
};

BOOST_LOG_ATTRIBUTE_KEYWORD(Severity, "Severity", MySeverityLevel)

int main()
{
  // ------ define sink
  logging::add_file_log
  (
    keywords::file_name = "test.log",
    keywords::filter = (Severity <= MySeverityLevel::error)
  );
  // ------ define logger
  src::severity_logger<MySeverityLevel> lg;
  // ------ output logging messages
  BOOST_LOG_SEV(lg, MySeverityLevel::panic) << "This is panic";
  BOOST_LOG_SEV(lg, MySeverityLevel::debug) << "This is debug";
}
#包括
#包括
名称空间日志=boost::log;
名称空间src=boost::log::sources;
名称空间关键字=boost::log::关键字;
枚举类MySeverityLevel
{
恐慌,
警觉的,
批评的
错误,
警告
注意,
信息,
调试
};
BOOST_LOG_ATTRIBUTE_关键字(严重性,“严重性”,MySeverityLevel)
int main()
{
//----定义水槽
日志记录::添加文件日志
(
关键词::file_name=“test.log”,

关键词::过滤器=(严重性我在回答我自己的问题。下面的代码实现了我想要的:

#include <boost/log/common.hpp>
#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace keywords = boost::log::keywords;

enum class MySeverityLevel
{
  panic,
  alert,
  critical,
  error,
  warning,
  notice,
  info,
  debug
};

BOOST_LOG_ATTRIBUTE_KEYWORD(Severity, "Severity", MySeverityLevel)

int main()
{
  // ------ define sink
  logging::add_file_log
  (
    keywords::file_name = "test.log",
    keywords::filter = (Severity <= MySeverityLevel::error)
  );
  // ------ define logger
  src::severity_logger<MySeverityLevel> lg;
  // ------ output logging messages
  BOOST_LOG_SEV(lg, MySeverityLevel::panic) << "This is panic";
  BOOST_LOG_SEV(lg, MySeverityLevel::debug) << "This is debug";
}
#包括
#包括
名称空间日志=boost::log;
名称空间src=boost::log::sources;
名称空间关键字=boost::log::关键字;
枚举类MySeverityLevel
{
恐慌,
警觉的,
批评的
错误,
警告
注意,
信息,
调试
};
BOOST_LOG_ATTRIBUTE_关键字(严重性,“严重性”,MySeverityLevel)
int main()
{
//----定义水槽
日志记录::添加文件日志
(
关键词::file_name=“test.log”,

关键词::过滤器=(严重性不太清楚问题出在哪里。你能发明一个从增强严重性级别到系统日志严重性级别的映射吗?是的,为什么不?@user463035818-是的,我能-但这不是这个问题的答案。不太清楚问题出在哪里。你能发明一个从增强严重性级别到系统日志严重性级别的映射吗?是的,为什么不?@user463035818-是的,我可以-但这不是这个问题的答案