/*\r
-* copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>\r
*\r
-* This file is part of CasparCG.\r
+* This file is part of CasparCG (www.casparcg.com).\r
*\r
-* CasparCG is free software: you can redistribute it and/or modify\r
-* it under the terms of the GNU General Public License as published by\r
-* the Free Software Foundation, either version 3 of the License, or\r
-* (at your option) any later version.\r
+* CasparCG is free software: you can redistribute it and/or modify\r
+* it under the terms of the GNU General Public License as published by\r
+* the Free Software Foundation, either version 3 of the License, or\r
+* (at your option) any later version.\r
*\r
-* CasparCG is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-* GNU General Public License for more details.\r
-\r
-* You should have received a copy of the GNU General Public License\r
-* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.\r
+* CasparCG is distributed in the hope that it will be useful,\r
+* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+* GNU General Public License for more details.\r
+*\r
+* You should have received a copy of the GNU General Public License\r
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.\r
*\r
+* Author: Robert Nagy, ronag89@gmail.com\r
*/\r
-// TODO: Colors in console.\r
-// TODO: Think through filters.\r
\r
#include "../stdafx.h"\r
\r
#include "../exception/exceptions.h"\r
#include "../utility/string.h"\r
#include <ios>\r
-#include <string>\r
#include <ostream>\r
\r
#include <boost/shared_ptr.hpp>\r
#include <boost/lambda/lambda.hpp>\r
\r
namespace caspar { namespace log {\r
-\r
-using namespace boost;\r
-\r
-void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const& rec)\r
+ \r
+void my_formatter(std::ostream& strm, boost::log::basic_record<char> const& rec)\r
{\r
namespace lambda = boost::lambda;\r
\r
timeinfo = localtime ( &rawtime );\r
char buffer [80];\r
strftime (buffer,80, "%c", timeinfo);\r
- strm << L"[" << buffer << L"] ";\r
+ strm << "[" << buffer << "] ";\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
+ if(boost::log::extract<boost::log::attributes::current_thread_id::held_type>("ThreadID", rec.attribute_values(), lambda::var(thread_id) = lambda::_1))\r
+ strm << "[" << thread_id << "] ";\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
+ if(boost::log::extract<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get(), rec.attribute_values(), lambda::var(severity) = lambda::_1))\r
+ strm << "[" << severity << "] ";\r
\r
strm << rec.message();\r
}\r
\r
void init()\r
{ \r
- boost::log::add_common_attributes<wchar_t>();\r
- typedef boost::log::aux::add_common_attributes_constants<wchar_t> traits_t;\r
+ boost::log::add_common_attributes<char>();\r
+ typedef boost::log::aux::add_common_attributes_constants<char> traits_t;\r
\r
- typedef boost::log::sinks::synchronous_sink<boost::log::sinks::wtext_file_backend> file_sink_type;\r
+ typedef boost::log::sinks::synchronous_sink<boost::log::sinks::text_file_backend> file_sink_type;\r
\r
- typedef boost::log::sinks::asynchronous_sink<boost::log::sinks::wtext_ostream_backend> stream_sink_type;\r
+ typedef boost::log::sinks::asynchronous_sink<boost::log::sinks::text_ostream_backend> stream_sink_type;\r
\r
- auto stream_backend = boost::make_shared<boost::log::sinks::wtext_ostream_backend>();\r
- stream_backend->add_stream(boost::shared_ptr<std::wostream>(&std::wcout, boost::log::empty_deleter()));\r
+ auto stream_backend = boost::make_shared<boost::log::sinks::text_ostream_backend>();\r
+ stream_backend->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::log::empty_deleter()));\r
stream_backend->auto_flush(true);\r
\r
auto stream_sink = boost::make_shared<stream_sink_type>(stream_backend);\r
\r
-#ifdef NDEBUG\r
- stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= trace);\r
-#else\r
- stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= trace);\r
-#endif\r
+//#ifdef NDEBUG\r
+// stream_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);\r
+//#else\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
\r
- boost::log::wcore::get()->add_sink(stream_sink);\r
+ boost::log::core::get()->add_sink(stream_sink);\r
}\r
\r
}\r
\r
-void add_file_sink(const std::wstring& folder)\r
+void add_file_sink(const ustring& folder)\r
{ \r
- boost::log::add_common_attributes<wchar_t>();\r
- typedef boost::log::aux::add_common_attributes_constants<wchar_t> traits_t;\r
+ boost::log::add_common_attributes<char>();\r
+ typedef boost::log::aux::add_common_attributes_constants<char> traits_t;\r
\r
- typedef boost::log::sinks::synchronous_sink<boost::log::sinks::wtext_file_backend> file_sink_type;\r
+ typedef boost::log::sinks::synchronous_sink<boost::log::sinks::text_file_backend> file_sink_type;\r
\r
try\r
{\r
BOOST_THROW_EXCEPTION(directory_not_found());\r
\r
auto file_sink = boost::make_shared<file_sink_type>(\r
- boost::log::keywords::file_name = (folder + L"caspar_%Y-%m-%d_%H-%M-%S.%N.log"),\r
+ boost::log::keywords::file_name = (folder + "caspar_%Y-%m-%d.log"),\r
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),\r
- boost::log::keywords::auto_flush = true\r
+ boost::log::keywords::auto_flush = true,\r
+ boost::log::keywords::open_mode = std::ios::app\r
);\r
\r
file_sink->locked_backend()->set_formatter(&my_formatter);\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()) >= trace);\r
-#else\r
- file_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= trace);\r
-#endif\r
- boost::log::wcore::get()->add_sink(file_sink);\r
-\r
- CASPAR_LOG(info) << L"Logging [info] or higher severity to " << folder << std::endl << std::endl;\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
+//#else\r
+// file_sink->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);\r
+//#endif\r
+ boost::log::core::get()->add_sink(file_sink);\r
}\r
catch(...)\r
{\r
- std::wcerr << L"Failed to Setup File Logging Sink" << std::endl << std::endl;\r
+ std::cerr << L"Failed to Setup File Logging Sink" << std::endl << std::endl;\r
}\r
}\r
\r
-void set_log_level(const std::wstring& lvl)\r
+void set_log_level(const ustring& lvl)\r
{ \r
- if(boost::iequals(lvl, L"trace"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= trace);\r
- else if(boost::iequals(lvl, L"debug"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);\r
- else if(boost::iequals(lvl, L"info"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= info);\r
- else if(boost::iequals(lvl, L"warning"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= warning);\r
- else if(boost::iequals(lvl, L"error"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= error);\r
- else if(boost::iequals(lvl, L"fatal"))\r
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= fatal);\r
+ //QWE\r
+ //if(iequals(lvl, "trace"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= trace);\r
+ //else if(iequals(lvl, "debug"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= debug);\r
+ //else if(iequals(lvl, "info"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= info);\r
+ //else if(iequals(lvl, "warning"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= warning);\r
+ //else if(iequals(lvl, "error"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= error);\r
+ //else if(iequals(lvl, "fatal"))\r
+ // boost::log::core::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<char>::get()) >= fatal);\r
}\r
\r
}}
\ No newline at end of file