我正在使用C++ Boost Log库(1.54)为Windows应用程序进行日志记录。我定义了一个简单的类来设置日志记录宏,并获取一个Boost配置文件,该文件定义了我的应用程序的接收器。

LoggerClass.h

class LoggerClass {
  public:
    static void Initialization(const std::string& configurationFile)
}

BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(my_logger, boost::log::sources::severity_logger_mt<boost::log_trivial::severity_level>);

#define LOG_INFO_MESSAGE BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::severity_level::info)

LoggerClass.cpp
void LoggerClass::Initialization(const std::string& configurationFile)
{
    boost::log::register_simple_formatter_factory< boost::log::trivial::severity_level, char >("Severity");
    boost::log::register_simple_filter_factory< boost::log::trivial::severity_level, char >("Severity");

    boost::log::register_simple_formatter_factory< unsigned int, char >("Line");
    boost::log::register_simple_filter_factory< unsigned int, char >("Line");

    boost::log::register_formatter_factory("TimeStamp", boost::make_shared< time_formatter_factory >());

    std::ifstream file(configurationFile);
    boost::log::init_from_stream(file);

    boost::log::add_common_attributes();

    my_boost::get();
}

我的配置文件:
[Core]
DisableLogging=false

[Sinks.Sink1]

Destination=Console

Asynchronous=false

AutoFlush=true

如果我在设置任何接收器之前调用了这些宏,则默认接收器会按需将第一条消息写入STDOUT。
int main(int argc, char* argv[] {
  LOG_INFO_MESSAGE << "Before Initialization()"; //writes to STDOUT

  LoggerClass::Initialization("log.conf"); //sets up the console sink

  LOG_INFO_MESSAGE << "After Initialization()"; //writes to STDERR???
}

但是,一旦我在配置文件中定义了一个控制台接收器并称为boost::log::init_from_stream()方法,所有消息都将以STDERR结束,而不是我期望的STDOUT。
C:\Test\TestLogger.exe > std.txt 2> err.txt

std.txt
[2014-05-08 12:57:17.293972] [0x00004b58] [info]    Before Initialization()

err.txt
After Initialization()

在设置控制台接收器后,默认情况下为什么不将消息发送到STDOUT?

最佳答案

根据Boost源头文件(Boost \ log \ utility \ setup \ console.hpp),控制台记录器将写入与C流STDERR相关联的std::clog。

关于c++ - 设置接收器后,Boost Console记录器将所有消息写入STDERR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23550030/

10-13 06:41