1/* 2 * Copyright 2017-2020, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#include "Logger.h" 6 7 8log_level Logger::fLevel = LOG_LEVEL_INFO; 9 10 11log_level 12Logger::Level() 13{ 14 return fLevel; 15} 16 17 18void 19Logger::SetLevel(log_level value) 20{ 21 fLevel = value; 22} 23 24 25/*static*/ 26const char* 27Logger::NameForLevel(log_level value) 28{ 29 switch (value) { 30 case LOG_LEVEL_OFF: 31 return "off"; 32 case LOG_LEVEL_INFO: 33 return "info"; 34 case LOG_LEVEL_DEBUG: 35 return "debug"; 36 case LOG_LEVEL_TRACE: 37 return "trace"; 38 case LOG_LEVEL_ERROR: 39 return "error"; 40 default: 41 return "?"; 42 } 43} 44 45 46/*static*/ bool 47Logger::SetLevelByName(const char *name) 48{ 49 if (strcmp(name, "off") == 0) { 50 fLevel = LOG_LEVEL_OFF; 51 } else if (strcmp(name, "info") == 0) { 52 fLevel = LOG_LEVEL_INFO; 53 } else if (strcmp(name, "debug") == 0) { 54 fLevel = LOG_LEVEL_DEBUG; 55 } else if (strcmp(name, "trace") == 0) { 56 fLevel = LOG_LEVEL_TRACE; 57 } else if (strcmp(name, "error") == 0) { 58 fLevel = LOG_LEVEL_ERROR; 59 } else { 60 return false; 61 } 62 63 return true; 64} 65 66 67/*static*/ 68bool 69Logger::IsLevelEnabled(log_level value) 70{ 71 return fLevel >= value; 72} 73 74 75bool 76Logger::IsInfoEnabled() 77{ 78 return IsLevelEnabled(LOG_LEVEL_INFO); 79} 80 81 82bool 83Logger::IsDebugEnabled() 84{ 85 return IsLevelEnabled(LOG_LEVEL_DEBUG); 86} 87 88 89bool 90Logger::IsTraceEnabled() 91{ 92 return IsLevelEnabled(LOG_LEVEL_TRACE); 93} 94 95 96/*! Returns a small integer that indicates the current thread identifier. This 97 is to _approximately_ be able to distinguish between threads in log lines. 98*/ 99 100/*static*/ uint32 101Logger::CurrentThreadIndicator() 102{ 103 uint32 thread_id_abs = static_cast<uint32>(find_thread(NULL)); 104 return thread_id_abs % 1000; 105} 106