]> git.sesse.net Git - casparcg/blobdiff - common/log.cpp
Merged from trunk
[casparcg] / common / log.cpp
index e6c2760e6bc4837561cbc872e84d24c641919ad7..f47e2a996fa9c997e58f3045ff42dd205bf4d3b9 100644 (file)
@@ -36,6 +36,7 @@
 #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
@@ -72,21 +73,7 @@ namespace caspar { namespace log {
 \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
@@ -113,7 +100,14 @@ void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const&
                        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
@@ -139,7 +133,7 @@ void init()
 //     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
@@ -166,10 +160,12 @@ std::wstring get_call_stack()
                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
@@ -207,7 +203,7 @@ void add_file_sink(const std::wstring& folder)
                        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