#include <string>\r
#include <ostream>\r
\r
+#include <boost/bind.hpp>\r
#include <boost/shared_ptr.hpp>\r
#include <boost/make_shared.hpp>\r
#include <boost/filesystem/convenience.hpp>\r
\r
using namespace boost;\r
\r
-template<typename T>\r
-inline void replace_nonprintable(std::basic_string<T, std::char_traits<T>, std::allocator<T>>& str, T with)\r
-{\r
- std::locale loc;\r
- std::replace_if(str.begin(), str.end(), [&](T c)->bool { return !std::isprint(c, loc) && c != '\r' && c != '\n'; }, with);\r
-}\r
-\r
-template<typename T>\r
-inline std::basic_string<T> replace_nonprintable_copy(std::basic_string<T, std::char_traits<T>, std::allocator<T>> str, T with)\r
-{\r
- replace_nonprintable(str, with);\r
- return str;\r
-}\r
-\r
-void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const& rec)\r
+void my_formatter(bool print_all_characters, std::wostream& strm, boost::log::basic_record<wchar_t> const& rec)\r
{\r
namespace lambda = boost::lambda;\r
\r
strm << L" ";\r
}\r
\r
- strm << replace_nonprintable_copy(rec.message(), L'?');\r
+ if (print_all_characters)\r
+ {\r
+ strm << rec.message();\r
+ }\r
+ else\r
+ {\r
+ strm << replace_nonprintable_copy(rec.message(), L'?');\r
+ }\r
}\r
\r
namespace internal{\r
// stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);\r
//#endif\r
\r
- stream_sink->locked_backend()->set_formatter(&my_formatter);\r
+ stream_sink->locked_backend()->set_formatter(boost::bind(my_formatter, false, _1, _2));\r
\r
boost::log::wcore::get()->add_sink(stream_sink);\r
}\r
virtual void OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr)\r
{\r
}\r
-\r
virtual void OnOutput(LPCSTR szText)\r
{\r
- str_ += szText;\r
+ std::string str = szText;\r
+\r
+ if(str.find("internal::get_call_stack") == std::string::npos && str.find("stack_walker::ShowCallstack") == std::string::npos)\r
+ str_ += std::move(str);\r
}\r
};\r
\r
boost::log::keywords::open_mode = std::ios::app\r
);\r
\r
- file_sink->locked_backend()->set_formatter(&my_formatter);\r
+ file_sink->locked_backend()->set_formatter(boost::bind(my_formatter, true, _1, _2));\r
\r
//#ifdef NDEBUG\r
// file_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);\r