c++ - 使用 Boost Logging 和 ERROR 优先级 3 到 syslog 数据库时出现问题
问题描述
我有一个使用 boost 日志记录的程序,并且大多数时候该程序将日志写入本地文件或通过 rsyslog 部署到 /var/log/messages 时。大多数时候我们只是对看到错误(boost::log::trivial::error)感兴趣,但是在开发时我们希望在更高级别进行日志记录。这种记录方法看起来一切都很好,我们还有几个 python 脚本也使用 rsyslog,它们也正常放入 /va/log/messages 没有问题。
作为开发人员,我最近的任务是将日志记录从 /va/log/messages 转移到 postgres 数据库表中,以允许外部客户端在可能发生错误时获得通知。无论如何,我已经设法通过对 /etc/rsyslog.conf 文件进行一些调整并将文件添加到我们的 postgres 数据库来登录到所述数据库。
在我的调试过程中,我注意到我的 C++ 应用程序每次将 LOG ERROR 写入 syslog 时,优先级(数据库表中的列)设置为 6 级(信息)而不是 3 级(错误)(来自 rsyslog 网页)。python 代码总是记录优先级 3。这使得现在很难过滤。我的升压配置如下:
if (syslog)
{
// Create a backend
m_syslogSink = boost::make_shared<syslog_sink>(
boost::log::keywords::facility = boost::log::sinks::syslog::user,
boost::log::keywords::use_impl = boost::log::sinks::syslog::native
);
// Set the straightforward level translator for the "Severity" attribute of type int
m_syslogSink->locked_backend()->set_severity_mapper(
boost::log::sinks::syslog::direct_severity_mapping<int>("Severity"));
m_syslogSink->set_formatter(
boost::log::expressions::stream
<< boost::log::expressions::if_(boost::log::expressions::has_attr(unitName))[
boost::log::expressions::stream << '[' << unitName << "] "
]
<< boost::log::expressions::smessage
);
// Share the filter level with the file log level but don't allow trace
m_syslogSink->set_filter(boost::bind(
&LogFilter, &m_fileLogLevel,
boost::log::trivial::debug, boost::log::trivial::fatal,
LogSource::LogType::FILE_OR_SYSLOG, ::_1));
// Register the syslog sink with the logging core
core->add_sink(m_syslogSink);
}
我们的 LOG_ERROR 分解为 BOOST_LOG_SEV(LogControl::getLog()->log, boost::log::trivial::error) << "A Error message";
任何人都知道为什么这可能是一个已知的错误?在 boost 库中,或者我做了一些愚蠢的事情,或者是不可能的。我正在使用 boost::log::trivial::error 级别。
/etc/rsyslog.conf 包含行 *.info;mail.none;authpriv.none;cron.none :ompgsql:127.0.0.1,syslog,rsyslog,secret 将其放入数据库。
并使用 python 代码引发 syslog 日志错误,该代码执行我想要的操作 syslog.syslog(syslog.LOG_ERROR, "ERROR message")
提前致谢。
解决方案
推荐阅读
- python - 如何更改 Alembic 中主键字段的长度?
- python - tkintertable:连续添加按钮?
- typescript - 如何使用 npm 包中的打字稿
- python - 来自用户输入的决策 + 存储结果在列表中 [未决问题]
- nginx - aws Nginx + .net core web-api 上的 elb + 自动缩放
- javascript - 为什么 textarea 中的选择范围重置为 0?
- node.js - TypeError:无法读取 null 的属性“会话”
- python - 如何从 Django 服务器与外部 python 脚本通信
- amazon-eks - EKS 1.11 和 HPA
- r - 在 R 中更改晶格密度图 Y 轴上的科学记数法