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