我使用在以下链接的例子。
https://www.boost.org/doc/libs/1_57_0/libs/log/doc/html/log/detailed/utilities.html#log.detailed.utilities.setup.settings_file
我的代码如下。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/log/utility/setup/settings.hpp>
#include <boost/log/utility/setup/from_settings.hpp>
#include <boost/regex.hpp>
namespace logging = boost::log;
namespace keywords = boost::log::keywords;
#define BOOST_LOG_DYN_LINK 1
int main(int, char*[])
{
//init_logging();
std::ifstream file("settings.ini");
logging::init_from_stream(file);
BOOST_LOG_TRIVIAL(trace) << "This is a trace severity message";
BOOST_LOG_TRIVIAL(debug) << "This is a debug severity message";
BOOST_LOG_TRIVIAL(info) << "This is an informational severity message";
BOOST_LOG_TRIVIAL(warning) << "This is a warning severity message";
BOOST_LOG_TRIVIAL(error) << "This is an error severity message";
BOOST_LOG_TRIVIAL(fatal) << "and this is a fatal severity message";
return 0;
}
我的Settings.ini文件如下所示。
# Logging core settings section. May be omitted if no parameters specified within it.
[Core]
DisableLogging=false
Filter="%Severity% > 3"
# Sink settings sections
[Sinks.MySink1]
# Sink destination type
Destination=TextFile
FileName="MyApp.log"
RotationSize=1024
# Formatter string. Optional, by default only log record message text is written.
Format="<%TimeStamp%> - %Message%"
# The flag shows whether the sink should be asynchronous
Asynchronous=false
但是是越来越创建任何文件。 我究竟做错了什么?
一切工作的权利,直到您添加过滤器:
Filter="%Severity% > 3"
谷歌搜索了一下(通过Boost.Log配置文件如),我发现:
如何配置severity_logger使用init_from_settings()获取该日志的自定义严重级别?
你必须为了能够与过滤器和格式解析器使用它来注册任何用户定义的属性值类型与库。 这包括你的严重性级别枚举。
它添加这样的:
logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");
现在,固定筛选表达式中使用的文本表示:
Filter="%Severity% > debug"
在同样,您需要将添加TimeStamp
属性核心 :
logging::core::get()->add_global_attribute("TimeStamp", logging::attributes::local_clock());
现在,这一切工作:
#include <fstream>
#include <iostream>
#include <boost/log/attributes.hpp>
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/from_settings.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/log/utility/setup/settings.hpp>
#include <boost/regex.hpp>
namespace logging = boost::log;
namespace keywords = boost::log::keywords;
#define BOOST_LOG_DYN_LINK 1
int main(int, char *[]) {
std::ifstream file("settings.ini");
logging::core::get()->add_global_attribute("TimeStamp", logging::attributes::local_clock());
logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");
logging::init_from_stream(file);
BOOST_LOG_TRIVIAL(trace) << "This is a trace severity message";
BOOST_LOG_TRIVIAL(debug) << "This is a debug severity message";
BOOST_LOG_TRIVIAL(info) << "This is an informational severity message";
BOOST_LOG_TRIVIAL(warning) << "This is a warning severity message";
BOOST_LOG_TRIVIAL(error) << "This is an error severity message";
BOOST_LOG_TRIVIAL(fatal) << "and this is a fatal severity message";
}
其中写到MyApp.log:
<2018-09-01 00:36:11.972436> - This is an informational severity message
<2018-09-01 00:36:11.972712> - This is a warning severity message
<2018-09-01 00:36:11.972735> - This is an error severity message
<2018-09-01 00:36:11.972747> - and this is a fatal severity message
新增演示住在Coliru