Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::将日志输出到Visual Studio输出控制台-将额外的LF/CR添加到格式_C++_Visual Studio_Boost - Fatal编程技术网

C++ boost::将日志输出到Visual Studio输出控制台-将额外的LF/CR添加到格式

C++ boost::将日志输出到Visual Studio输出控制台-将额外的LF/CR添加到格式,c++,visual-studio,boost,C++,Visual Studio,Boost,我正在使用boost 1.65.1,我想配置boost::log以将日志消息输出到我的Visual Studio 2015输出调试窗口。问题是消息有unix行结尾,所以我的所有消息都在输出窗口的一行(长)中 我不想在每个日志消息中都添加额外的CR/LF,因为这会影响到我正在使用的文件中消息的并发输出 这就是我初始化boost::log以输出VS可以拾取的消息的方式: #include <boost/log/trivial.hpp> #include <boost/log/exp

我正在使用boost 1.65.1,我想配置boost::log以将日志消息输出到我的Visual Studio 2015输出调试窗口。问题是消息有unix行结尾,所以我的所有消息都在输出窗口的一行(长)中

我不想在每个日志消息中都添加额外的CR/LF,因为这会影响到我正在使用的文件中消息的并发输出

这就是我初始化boost::log以输出VS可以拾取的消息的方式:

#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <boost/log/sinks/debug_output_backend.hpp>
#include <boost/exception/all.hpp>
#include <exception>

typedef sinks::synchronous_sink< sinks::debug_output_backend > sink_t;
...

logging::add_console_log( <stuff> );
logging::add_file_log( <stuff> );

boost::shared_ptr< logging::core > core = logging::core::get();

// Create the sink. The backend requires synchronization in the frontend.
boost::shared_ptr< sink_t > sink(new sink_t());

// Set the special filter to the frontend
// in order to skip the sink when no debugger is available
sink->set_filter(expr::is_debugger_present());
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
typedef sinks::synchronous_sinksink\t;
...
日志:添加控制台日志();
日志::添加_文件_日志();
boost::shared_ptrcore=logging::core::get();
//创建水槽。后端需要在前端进行同步。
boost::shared_ptrsink(新sink_t());
//将专用过滤器设置到前端
//以便在没有可用调试器时跳过接收器
sink->set_filter(expr::is_debugger_present());
我在添加文件日志和添加控制台日志中有一个格式说明符,但是 是否可以添加特定于debug_output_backend的格式说明符,以输出我需要的额外CR/LF。i、 e.仅针对Visual Studio的输出(其他输出方法保持不变)


注意:此接收器与boost::log docs所称的“控制台”完全不同,后者只是“标准输出”的日志消息目的地

原来这是一个简单的解决办法。我进一步阅读了Sink Backends文档和Windows事件日志Sink部分,它们使用set_格式化程序。因此,只需在调用set_filter后添加以下内容即可修复:

sink->set_formatter
(
  expr::format("%1%: [%2%] - %3%\r\n")
  % expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S")
  % logging::trivial::severity
  % expr::smessage
);
sink->set\u格式化程序
(
expr::format(“%1%:[%2%]-%3%\r\n”)
%expr::格式化日期时间(“时间戳”,%Y-%m-%d%H:%m:%S)
%日志记录::普通::严重性
%表达式::smessage
);

希望这对某人有所帮助。

我不知道如何在Boost中解决这个问题,但归根结底必须是一个
fopen
呼叫。在“文本”模式下打开文件(将“t”添加到模式字符串)可以解决此问题。可能的副本根本不重复。控制台基本上是cout。Windows控制台是一个完全不同的输出“目标”。它在boost::log中有自己的接收器,就像cout一样。作为参考,可以找到一个windows调试器日志的示例