set(SOURCES
diagnostics/graph.cpp
- diagnostics/graph_to_log_sink.cpp
gl/gl_check.cpp
endif ()
set(HEADERS
diagnostics/graph.h
- diagnostics/graph_to_log_sink.h
gl/gl_check.h
consumer/port.cpp
diagnostics/call_context.cpp
+ diagnostics/graph_to_log_sink.cpp
diagnostics/osd_graph.cpp
diagnostics/subject_diagnostics.cpp
consumer/write_frame_consumer.h
diagnostics/call_context.h
+ diagnostics/graph_to_log_sink.h
diagnostics/osd_graph.h
diagnostics/subject_diagnostics.h
#include "call_context.h"
#include <boost/thread/tss.hpp>
+#include <boost/lexical_cast.hpp>
namespace caspar { namespace core { namespace diagnostics {
return *local;
}
+std::wstring call_context::to_string() const
+{
+ if (video_channel == -1)
+ return L"[]";
+ else if (layer == -1)
+ return L"[ch=" + boost::lexical_cast<std::wstring>(video_channel) + L"]";
+ else
+ return L"[ch=" + boost::lexical_cast<std::wstring>(video_channel) + L"; layer=" + boost::lexical_cast<std::wstring>(layer) + L"]";
+}
+
}}}
#pragma once
+#include <string>
+
namespace caspar { namespace core { namespace diagnostics {
struct call_context
int layer = -1;
static call_context& for_thread();
+ std::wstring to_string() const;
};
class scoped_call_context : boost::noncopyable
#include "graph_to_log_sink.h"
-#include "../log.h"
+#include "call_context.h"
+
+#include <common/diagnostics/graph.h>
+#include <common/memory.h>
+#include <common/log.h>
#include <tbb/spin_mutex.h>
-namespace caspar { namespace diagnostics {
+namespace caspar { namespace core { namespace diagnostics {
-class graph_to_log_sink : public spi::graph_sink
+class graph_to_log_sink : public caspar::diagnostics::spi::graph_sink
{
tbb::spin_mutex mutex_;
std::wstring text_;
+ std::wstring context_ = call_context::for_thread().to_string();
public:
void activate() override
{
{
}
- void set_tag(tag_severity severity, const std::string& name) override
+ void set_tag(caspar::diagnostics::tag_severity severity, const std::string& name) override
{
tbb::spin_mutex::scoped_lock lock(mutex_);
-
+
switch (severity)
{
- case tag_severity::INFO:
- CASPAR_LOG(trace) << L"[diagnostics] [" << text_ << L"] " << name;
+ case caspar::diagnostics::tag_severity::INFO:
+ CASPAR_LOG(trace) << L"[diagnostics] [" << text_ << L"] " << name << L" " << context_;
break;
- case tag_severity::WARNING:
- CASPAR_LOG(debug) << L"[diagnostics] [" << text_ << L"] " << name;
+ case caspar::diagnostics::tag_severity::WARNING:
+ CASPAR_LOG(debug) << L"[diagnostics] [" << text_ << L"] " << name << L" " << context_;
break;
}
}
void register_graph_to_log_sink()
{
- spi::register_sink_factory([] { return spl::make_shared<graph_to_log_sink>(); });
+ caspar::diagnostics::spi::register_sink_factory([] { return spl::make_shared<graph_to_log_sink>(); });
}
-}}
+}}}
#pragma once
-#include "../memory.h"
-#include "graph.h"
-
-namespace caspar { namespace diagnostics {
+namespace caspar { namespace core { namespace diagnostics {
void register_graph_to_log_sink();
-}}
+}}}
#include <common/utf.h>
#include <common/memory.h>
#include <common/polling_filesystem_monitor.h>
-#include <common/diagnostics/graph_to_log_sink.h>
#include <core/video_channel.h>
#include <core/video_format.h>
#include <core/diagnostics/subject_diagnostics.h>
#include <core/diagnostics/call_context.h>
#include <core/diagnostics/osd_graph.h>
+#include <core/diagnostics/graph_to_log_sink.h>
#include <core/system_info_provider.h>
#include <core/help/help_repository.h>
, shutdown_server_now_(shutdown_server_now)
{
running_ = false;
- caspar::diagnostics::register_graph_to_log_sink();
+ core::diagnostics::register_graph_to_log_sink();
caspar::core::diagnostics::osd::register_sink();
diag_subject_->attach_parent(monitor_subject_);