]> git.sesse.net Git - casparcg/blob - common/log/log.h
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / common / log / log.h
1 #pragma once\r
2 \r
3 #if defined(_MSC_VER)\r
4 #pragma warning (push)\r
5 #pragma warning (disable : 4100)\r
6 #pragma warning (disable : 4127) // conditional expression is constant\r
7 #pragma warning (disable : 4512)\r
8 #pragma warning (disable : 4714) // marked as __forceinline not inlined\r
9 #pragma warning (disable : 4996) // _CRT_SECURE_NO_WARNINGS\r
10 #endif\r
11 \r
12 #include <boost/log/detail/prologue.hpp>\r
13 #include <boost/log/keywords/severity.hpp>\r
14 #include <boost/log/sources/global_logger_storage.hpp>\r
15 #include <boost/log/sources/severity_logger.hpp>\r
16 #include <boost/log/sources/record_ostream.hpp>\r
17 \r
18 #include "../utility/string_convert.h"\r
19 \r
20 namespace caspar { namespace log {\r
21         \r
22 namespace internal{\r
23 void init();\r
24 }\r
25 \r
26 void add_file_sink(const std::wstring& folder);\r
27 \r
28 enum severity_level\r
29 {\r
30         trace,\r
31         debug,\r
32         info,\r
33         warning,\r
34         error,\r
35         fatal\r
36 };\r
37 \r
38 template< typename CharT, typename TraitsT >\r
39 inline std::basic_ostream< CharT, TraitsT >& operator<< (\r
40         std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl)\r
41 {\r
42         if(lvl == trace)\r
43                 strm << "trace";\r
44         else if(lvl == debug)\r
45                 strm << "debug";\r
46         else if(lvl == info)\r
47                 strm << "info";\r
48         else if(lvl == warning)\r
49                 strm << "warning";\r
50         else if(lvl == error)\r
51                 strm << "error";\r
52         else if(lvl == fatal)\r
53                 strm << "fatal";\r
54         else\r
55                 strm << static_cast<int>(lvl);\r
56 \r
57         return strm;\r
58 }\r
59 \r
60 typedef boost::log::sources::wseverity_logger_mt<severity_level> caspar_logger;\r
61 \r
62 BOOST_LOG_DECLARE_GLOBAL_LOGGER_INIT(logger, caspar_logger)\r
63 {\r
64         internal::init();\r
65         return caspar_logger(boost::log::keywords::severity = trace);\r
66 }\r
67 \r
68 #define CASPAR_LOG(lvl)\\r
69         BOOST_LOG_STREAM_WITH_PARAMS(::caspar::log::get_logger(),\\r
70                 (::boost::log::keywords::severity = ::caspar::log::lvl))\r
71 \r
72 #define CASPAR_LOG_CURRENT_EXCEPTION() \\r
73         try\\r
74         {CASPAR_LOG(error) << caspar::widen(boost::current_exception_diagnostic_information());}\\r
75         catch(...){}\r
76 \r
77 }}\r
78 \r
79 #if defined(_MSC_VER)\r
80 #pragma warning (pop)\r
81 #endif