Changeset 48 for trunk/src/logger.cc
- Timestamp:
- 05/28/13 21:29:34 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/logger.cc
r4 r48 9 9 #include <algorithm> 10 10 #include <fstream> 11 #include <ctime> 12 #include <cstdio> 11 13 #include <nv/exception.hh> 14 #if NV_PLATFORM == NV_WINDOWS 15 #define WIN32_LEAN_AND_MEAN 16 #include <Windows.h> 17 #endif 12 18 13 19 using namespace nv; … … 29 35 }; 30 36 37 // log level names 38 const char *log_level_names_pad[] = 39 { 40 "NONE ", 41 "FATAL ", 42 "CRITICAL", 43 "ERROR ", 44 "WARNING ", 45 "NOTICE ", 46 "INFO ", 47 "INFO ", 48 "DEBUG ", 49 "DEBUG2 ", 50 "TRACE " 51 }; 52 31 53 // helper macro to access log_level_names 32 54 #define NV_LOG_LEVEL_NAME(level) (log_level_names[ (level) / 10 ]) 55 #define NV_LOG_LEVEL_NAME_PAD(level) (log_level_names_pad[ (level) / 10 ]) 56 57 #if NV_PLATFORM == NV_WINDOWS 58 unsigned short log_color[] = 59 { 60 FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY, 61 FOREGROUND_RED | FOREGROUND_INTENSITY, 62 FOREGROUND_RED | FOREGROUND_INTENSITY, 63 FOREGROUND_RED, 64 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY, 65 FOREGROUND_GREEN | FOREGROUND_INTENSITY, 66 FOREGROUND_GREEN, 67 FOREGROUND_GREEN, 68 FOREGROUND_INTENSITY, 69 FOREGROUND_INTENSITY, 70 FOREGROUND_INTENSITY 71 }; 72 #else 73 const char *log_color[] = 74 { 75 "\33[37;1m", 76 "\33[31;1m", 77 "\33[31;1m", 78 "\33[31m", 79 "\33[33;1m", 80 "\33[32;1m", 81 "\33[32m", 82 "\33[32m", 83 "\33[30;1m", 84 "\33[30;1m", 85 "\33[30;1m" 86 }; 87 #endif 33 88 34 89 // log function … … 105 160 void log_console_sink::log( log_level level, const std::string& message ) 106 161 { 107 std::cout << "[" << NV_LOG_LEVEL_NAME(level) << "] " << message << std::endl; 162 if (m_color) 163 { 164 #if NV_PLATFORM == NV_WINDOWS 165 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY ); 166 std::cout << timestamp() << " ["; 167 SetConsoleTextAttribute( m_handle, log_color[ (level) / 10 ] ); 168 std::cout << NV_LOG_LEVEL_NAME_PAD(level); 169 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY ); 170 std::cout << "] "; 171 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); 172 std::cout << message << std::endl; 173 #else 174 std::cout << "\33[30;1m" << timestamp() << " [" << log_color[ (level) / 10 ] << NV_LOG_LEVEL_NAME_PAD(level) << "\33[30;1m] \33[37;1m" << message << std::endl; 175 #endif 176 } 177 else 178 { 179 std::cout << timestamp() << " [" << NV_LOG_LEVEL_NAME_PAD(level) << "] " << message << std::endl; 180 } 108 181 } 109 182 … … 115 188 { 116 189 // write and flush using std::endl 117 *m_stream << "[" << NV_LOG_LEVEL_NAME(level) << "] " << message << std::endl;190 *m_stream << timestamp() << " [" << NV_LOG_LEVEL_NAME(level) << "] " << message << std::endl; 118 191 } 119 192 else 120 193 { 121 194 // write and end with "\n" (no flush) 122 *m_stream << "[" << NV_LOG_LEVEL_NAME(level) << "] " << message << "\n";195 *m_stream << timestamp() << " [" << NV_LOG_LEVEL_NAME(level) << "] " << message << "\n"; 123 196 } 124 197 } … … 149 222 delete m_stream; 150 223 } 224 225 nv::log_console_sink::log_console_sink( bool coloring ) 226 : m_color( coloring ) 227 { 228 #if NV_PLATFORM == NV_WINDOWS 229 m_handle = GetStdHandle( STD_OUTPUT_HANDLE ); 230 #endif 231 } 232 233 const char* nv::log_sink::timestamp() const 234 { 235 std::clock_t time = std::clock(); 236 unsigned int secs = (unsigned int)(time / CLOCKS_PER_SEC); 237 unsigned int mm = (unsigned int)(time*100 / CLOCKS_PER_SEC) % 100; 238 unsigned int h = (unsigned int)(secs / (60*60)); 239 unsigned int m = (unsigned int)(secs / 60) % 60; 240 unsigned int s = secs % 60; 241 static char buffer[128]; 242 #if NV_PLATFORM == NV_WINDOWS 243 sprintf_s( buffer, 128, "%02d:%02d:%02d.%02d", h, m, s, mm ); 244 #else 245 sprintf( buffer, "%02d:%02d:%02d.%02d", h, m, s, mm ); 246 #endif 247 buffer[11] = '\0'; 248 return buffer; 249 }
Note: See TracChangeset
for help on using the changeset viewer.