diff --git a/CGDWebServer/GCDWebServer.h b/CGDWebServer/GCDWebServer.h index 32e03ee..e773c18 100644 --- a/CGDWebServer/GCDWebServer.h +++ b/CGDWebServer/GCDWebServer.h @@ -30,6 +30,15 @@ #import "GCDWebServerRequest.h" #import "GCDWebServerResponse.h" +typedef NS_ENUM(int, GCDWebServerLogLevel) { + kGCDWebServerLogLevel_Debug = 0, // Only available if "NDEBUG" is not defined when building + kGCDWebServerLogLevel_Verbose, + kGCDWebServerLogLevel_Info, + kGCDWebServerLogLevel_Warning, + kGCDWebServerLogLevel_Error, + kGCDWebServerLogLevel_Exception, +}; + typedef GCDWebServerRequest* (^GCDWebServerMatchBlock)(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery); typedef GCDWebServerResponse* (^GCDWebServerProcessBlock)(GCDWebServerRequest* request); @@ -87,6 +96,9 @@ NSString* GCDWebServerGetPrimaryIPv4Address(); // Returns IPv4 address of prima @end @interface GCDWebServer (Logging) +#ifndef __GCDWEBSERVER_LOGGING_HEADER__ ++ (void)setLogLevel:(GCDWebServerLogLevel)level; // Default level is DEBUG or INFO if "NDEBUG" is defined when building (it can also be set at runtime with the "logLevel" environment variable) +#endif - (void)logVerbose:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2); - (void)logInfo:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2); - (void)logWarning:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2); diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m index 5c39af8..bce5940 100644 --- a/CGDWebServer/GCDWebServer.m +++ b/CGDWebServer/GCDWebServer.m @@ -65,9 +65,9 @@ #ifndef __GCDWEBSERVER_LOGGING_HEADER__ #ifdef NDEBUG -long GCDLogMinLevel = 2; // INFO level and higher +GCDWebServerLogLevel GCDLogLevel = kGCDWebServerLogLevel_Info; #else -long GCDLogMinLevel = 0; // DEBUG level and higher +GCDWebServerLogLevel GCDLogLevel = kGCDWebServerLogLevel_Debug; #endif #endif @@ -79,7 +79,7 @@ static BOOL _run; #ifndef __GCDWEBSERVER_LOGGING_HEADER__ -void GCDLogMessage(long level, NSString* format, ...) { +void GCDLogMessage(GCDWebServerLogLevel level, NSString* format, ...) { static const char* levelNames[] = {"DEBUG", "VERBOSE", "INFO", "WARNING", "ERROR", "EXCEPTION"}; va_list arguments; va_start(arguments, format); @@ -311,7 +311,7 @@ static void _SignalHandler(int signal) { + (void)load { const char* logLevel = getenv("logLevel"); if (logLevel) { - GCDLogMinLevel = atoi(logLevel); + GCDLogLevel = atoi(logLevel); } } @@ -376,7 +376,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er LOG_ERROR(@"Bonjour error %i (domain %i)", (int)error->error, (int)error->domain); } else { GCDWebServer* server = (ARC_BRIDGE GCDWebServer*)info; - LOG_VERBOSE(@"%@ now reachable at %@", [server class], server.bonjourServerURL); + LOG_INFO(@"%@ now reachable at %@", [server class], server.bonjourServerURL); } } } @@ -472,7 +472,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er } dispatch_resume(_source); - LOG_VERBOSE(@"%@ started on port %i and reachable at %@", [self class], (int)_port, self.serverURL); + LOG_INFO(@"%@ started on port %i and reachable at %@", [self class], (int)_port, self.serverURL); } else { LOG_ERROR(@"Failed listening on socket (%i): %s", errno, strerror(errno)); close(listeningSocket); @@ -505,7 +505,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er ARC_DISPATCH_RELEASE(_source); _source = NULL; - LOG_VERBOSE(@"%@ stopped", [self class]); + LOG_INFO(@"%@ stopped", [self class]); } _port = 0; } @@ -745,6 +745,14 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er @implementation GCDWebServer (Logging) +#ifndef __GCDWEBSERVER_LOGGING_HEADER__ + ++ (void)setLogLevel:(GCDWebServerLogLevel)level { + GCDLogLevel = level; +} + +#endif + - (void)logVerbose:(NSString*)format, ... { va_list arguments; va_start(arguments, format); diff --git a/CGDWebServer/GCDWebServerPrivate.h b/CGDWebServer/GCDWebServerPrivate.h index 5bce27a..06cc961 100644 --- a/CGDWebServer/GCDWebServerPrivate.h +++ b/CGDWebServer/GCDWebServerPrivate.h @@ -71,14 +71,14 @@ #else -extern long GCDLogMinLevel; -extern void GCDLogMessage(long level, NSString* format, ...) NS_FORMAT_FUNCTION(2, 3); +extern GCDWebServerLogLevel GCDLogLevel; +extern void GCDLogMessage(GCDWebServerLogLevel level, NSString* format, ...) NS_FORMAT_FUNCTION(2, 3); -#define LOG_VERBOSE(...) do { if (GCDLogMinLevel <= 1) GCDLogMessage(1, __VA_ARGS__); } while (0) -#define LOG_INFO(...) do { if (GCDLogMinLevel <= 2) GCDLogMessage(2, __VA_ARGS__); } while (0) -#define LOG_WARNING(...) do { if (GCDLogMinLevel <= 3) GCDLogMessage(3, __VA_ARGS__); } while (0) -#define LOG_ERROR(...) do { if (GCDLogMinLevel <= 4) GCDLogMessage(4, __VA_ARGS__); } while (0) -#define LOG_EXCEPTION(__EXCEPTION__) do { if (GCDLogMinLevel <= 5) GCDLogMessage(5, @"%@", __EXCEPTION__); } while (0) +#define LOG_VERBOSE(...) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Verbose) GCDLogMessage(kGCDWebServerLogLevel_Verbose, __VA_ARGS__); } while (0) +#define LOG_INFO(...) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Info) GCDLogMessage(kGCDWebServerLogLevel_Info, __VA_ARGS__); } while (0) +#define LOG_WARNING(...) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Warning) GCDLogMessage(kGCDWebServerLogLevel_Warning, __VA_ARGS__); } while (0) +#define LOG_ERROR(...) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Error) GCDLogMessage(kGCDWebServerLogLevel_Error, __VA_ARGS__); } while (0) +#define LOG_EXCEPTION(__EXCEPTION__) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Exception) GCDLogMessage(kGCDWebServerLogLevel_Exception, @"%@", __EXCEPTION__); } while (0) #ifdef NDEBUG @@ -95,7 +95,7 @@ extern void GCDLogMessage(long level, NSString* format, ...) NS_FORMAT_FUNCTION( } \ } while (0) #define DNOT_REACHED() abort() -#define LOG_DEBUG(...) do { if (GCDLogMinLevel <= 0) GCDLogMessage(0, __VA_ARGS__); } while (0) +#define LOG_DEBUG(...) do { if (GCDLogLevel <= kGCDWebServerLogLevel_Debug) GCDLogMessage(kGCDWebServerLogLevel_Debug, __VA_ARGS__); } while (0) #endif