Logger class to the console (stderr). */
| 101 | |
| 102 | /** Logger class to the console (stderr). */ |
| 103 | class ConsoleLogger : public Logger |
| 104 | { |
| 105 | public: |
| 106 | ConsoleLogger(Level level) |
| 107 | { |
| 108 | level_ = level; |
| 109 | //std::ios_base::unitbuf causes automatic flushing which access |
| 110 | //thread local variable via std::uncaught_exception(). |
| 111 | //This causes deadlock with ocl-icd until its recent update. |
| 112 | //Accessing TLS has a slight performance penalty. |
| 113 | //log() always flush the ostream so unitbuf is unnecessary anyway. |
| 114 | std::nounitbuf(std::cerr); |
| 115 | } |
| 116 | virtual ~ConsoleLogger() {} |
| 117 | virtual void log(Level level, const std::string &message) |
| 118 | { |
| 119 | if(level > level_) return; |
| 120 | |
| 121 | (level <= Warning ? std::cerr : std::cout) << "[" << level2str(level) << "] " << message << std::endl; |
| 122 | } |
| 123 | }; |
| 124 | |
| 125 | Logger *createConsoleLogger(Logger::Level level) |
| 126 | { |
nothing calls this directly
no outgoing calls
no test coverage detected