]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: log: Added timestamp.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 7 Jun 2011 14:07:30 +0000 (14:07 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 7 Jun 2011 14:07:30 +0000 (14:07 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@856 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

common/log/log.cpp
core/producer/stage.cpp

index 8b5e9e056dcddb3e9dc7e90c41c3b2f64bca3ced..7fbf20171e07e86216a1f5d417e1ce537d956eda 100644 (file)
 #include <boost/log/sinks/text_ostream_backend.hpp>\r
 #include <boost/log/sinks/sync_frontend.hpp>\r
 #include <boost/log/sinks/async_frontend.hpp>\r
+#include <boost/log/core/record.hpp>\r
+#include <boost/log/utility/attribute_value_extractor.hpp>\r
 \r
 #include <boost/log/utility/init/common_attributes.hpp>\r
 #include <boost/log/utility/empty_deleter.hpp>\r
-\r
+#include <boost/lambda/lambda.hpp>\r
 \r
 namespace caspar{ namespace log{\r
 \r
 using namespace boost;\r
 \r
-namespace internal{\r
 \r
+class system_uptime : public boost::log::attribute\r
+{\r
+    typedef boost::log::attributes::basic_attribute_value<unsigned int> attribute_value_type;\r
+\r
+public:\r
+    boost::shared_ptr<boost::log::attribute_value> get_value()\r
+    {\r
+        unsigned int up;\r
+        up = GetTickCount() / 1000;\r
+        return boost::shared_ptr<boost::log::attribute_value>(new attribute_value_type(up));\r
+    }\r
+};\r
+\r
+void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const& rec)\r
+{\r
+    namespace lambda = boost::lambda;\r
+       \r
+       #pragma warning(disable : 4996)\r
+       time_t rawtime;\r
+       struct tm* timeinfo;\r
+       time(&rawtime );\r
+       timeinfo = localtime ( &rawtime );\r
+       char buffer [80];\r
+       strftime (buffer,80, "%c", timeinfo);\r
+       strm << L"[" << buffer << L"] ";\r
+               \r
+    boost::log::attributes::current_thread_id::held_type thread_id;\r
+    if(boost::log::extract<boost::log::attributes::current_thread_id::held_type>(L"ThreadID", rec.attribute_values(), lambda::var(thread_id) = lambda::_1))\r
+        strm << L"[" << thread_id << L"] ";\r
+\r
+    severity_level severity;\r
+    if(boost::log::extract<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get(), rec.attribute_values(), lambda::var(severity) = lambda::_1))\r
+        strm << L"[" << severity << L"] ";\r
+\r
+    strm << rec.message();\r
+}\r
+\r
+namespace internal{\r
+       \r
 void init()\r
 {      \r
+       boost::log::wcore::get()->add_global_attribute(L"ASD", boost::make_shared<system_uptime>());\r
+\r
        boost::log::add_common_attributes<wchar_t>();\r
        typedef boost::log::aux::add_common_attributes_constants<wchar_t> traits_t;\r
 \r
@@ -79,18 +121,11 @@ void init()
        stream_backend->auto_flush(true);\r
 \r
        auto stream_sink = boost::make_shared<stream_sink_type>(stream_backend);\r
-\r
-       stream_sink->locked_backend()->set_formatter(\r
-               boost::log::formatters::wstream\r
-                       //<< L"[" << boost::log::formatters::date_time<std::tm>(L"TimeStamp") << L"] "\r
-                       << L"[" << boost::log::formatters::attr<boost::log::attributes::current_thread_id::held_type >(L"ThreadID") << L"] "\r
-                       << L"[" << boost::log::formatters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) << L"] "\r
-                       << boost::log::formatters::message<wchar_t>()\r
-       );\r
+       \r
+       stream_sink->locked_backend()->set_formatter(&my_formatter);\r
 \r
        boost::log::wcore::get()->add_sink(stream_sink);\r
 }\r
-\r
 }\r
 \r
 void add_file_sink(const std::wstring& folder)\r
@@ -111,13 +146,13 @@ void add_file_sink(const std::wstring& folder)
                        boost::log::keywords::auto_flush = true\r
                );\r
 \r
-               file_sink->locked_backend()->set_formatter(\r
-                       boost::log::formatters::wstream\r
-                               //<< L"[" << boost::log::formatters::date_time<std::tm>(L"TimeStamp") << L"] "\r
-                               << L"[" << boost::log::formatters::attr<boost::log::attributes::current_thread_id::held_type >(L"ThreadID") << L"] "\r
-                               << L"[" << boost::log::formatters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) << L"] "\r
-                               << boost::log::formatters::message<wchar_t>()\r
-               );\r
+               //file_sink->locked_backend()->set_formatter(\r
+               //      boost::log::formatters::wstream\r
+               //              //<< L"[" << boost::log::formatters::date_time(L"TimeStamp") << L"] "\r
+               //              << L"[" << boost::log::formatters::attr<boost::log::attributes::current_thread_id::held_type >(L"ThreadID") << L"] "\r
+               //              << L"[" << boost::log::formatters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) << L"] "\r
+               //              << boost::log::formatters::message<wchar_t>()\r
+               //);\r
 \r
                file_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= info);\r
                \r
index b82b31bb2234355a21b0e5bba234fb35fbbdadc9..809e93f271f8cb69dc75ab9e317ab9c04bfba95f 100644 (file)
@@ -109,37 +109,58 @@ public:
 \r
        void load(int index, const safe_ptr<frame_producer>& producer, bool preview)\r
        {\r
-               channel_.execution().invoke([&]{layers_[index].load(make_safe<destroy_producer_proxy>(channel_.destruction(), producer), preview);});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_[index].load(make_safe<destroy_producer_proxy>(channel_.destruction(), producer), preview);\r
+               });\r
        }\r
 \r
        void pause(int index)\r
        {               \r
-               channel_.execution().invoke([&]{layers_[index].pause();});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_[index].pause();\r
+               });\r
        }\r
 \r
        void play(int index)\r
        {               \r
-               channel_.execution().invoke([&]{layers_[index].play();});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_[index].play();\r
+               });\r
        }\r
 \r
        void stop(int index)\r
        {               \r
-               channel_.execution().invoke([&]{layers_[index].stop();});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_[index].stop();\r
+               });\r
        }\r
 \r
        void clear(int index)\r
        {\r
-               channel_.execution().invoke([&]{layers_.erase(index);});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_.erase(index);\r
+               });\r
        }\r
                \r
        void clear()\r
        {\r
-               channel_.execution().invoke([&]{layers_.clear();});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_.clear();\r
+               });\r
        }       \r
        \r
        void swap_layer(int index, size_t other_index)\r
        {\r
-               channel_.execution().invoke([&]{layers_[index].swap(layers_[other_index]);});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       layers_[index].swap(layers_[other_index]);\r
+               });\r
        }\r
 \r
        void swap_layer(int index, size_t other_index, stage& other)\r