137 lines
6.2 KiB
Objective-C
137 lines
6.2 KiB
Objective-C
/**
|
|
* In order to provide fast and flexible logging, this project uses Cocoa Lumberjack.
|
|
*
|
|
* The Google Code page has a wealth of documentation if you have any questions.
|
|
* https://github.com/robbiehanson/CocoaLumberjack
|
|
*
|
|
* Here's what you need to know concerning how logging is setup for CocoaHTTPServer:
|
|
*
|
|
* There are 4 log levels:
|
|
* - Error
|
|
* - Warning
|
|
* - Info
|
|
* - Verbose
|
|
*
|
|
* In addition to this, there is a Trace flag that can be enabled.
|
|
* When tracing is enabled, it spits out the methods that are being called.
|
|
*
|
|
* Please note that tracing is separate from the log levels.
|
|
* For example, one could set the log level to warning, and enable tracing.
|
|
*
|
|
* All logging is asynchronous, except errors.
|
|
* To use logging within your own custom files, follow the steps below.
|
|
*
|
|
* Step 1:
|
|
* Import this header in your implementation file:
|
|
*
|
|
* #import "HTTPLogging.h"
|
|
*
|
|
* Step 2:
|
|
* Define your logging level in your implementation file:
|
|
*
|
|
* // Log levels: off, error, warn, info, verbose
|
|
* static const int httpLogLevel = HTTP_LOG_LEVEL_VERBOSE;
|
|
*
|
|
* If you wish to enable tracing, you could do something like this:
|
|
*
|
|
* // Debug levels: off, error, warn, info, verbose
|
|
* static const int httpLogLevel = HTTP_LOG_LEVEL_INFO | HTTP_LOG_FLAG_TRACE;
|
|
*
|
|
* Step 3:
|
|
* Replace your NSLog statements with HTTPLog statements according to the severity of the message.
|
|
*
|
|
* NSLog(@"Fatal error, no dohickey found!"); -> HTTPLogError(@"Fatal error, no dohickey found!");
|
|
*
|
|
* HTTPLog works exactly the same as NSLog.
|
|
* This means you can pass it multiple variables just like NSLog.
|
|
**/
|
|
|
|
#import "DDLog.h"
|
|
|
|
// Define logging context for every log message coming from the HTTP server.
|
|
// The logging context can be extracted from the DDLogMessage from within the logging framework,
|
|
// which gives loggers, formatters, and filters the ability to optionally process them differently.
|
|
|
|
#define HTTP_LOG_CONTEXT 80
|
|
|
|
// Configure log levels.
|
|
|
|
#define HTTP_LOG_FLAG_ERROR (1 << 0) // 0...00001
|
|
#define HTTP_LOG_FLAG_WARN (1 << 1) // 0...00010
|
|
#define HTTP_LOG_FLAG_INFO (1 << 2) // 0...00100
|
|
#define HTTP_LOG_FLAG_VERBOSE (1 << 3) // 0...01000
|
|
|
|
#define HTTP_LOG_LEVEL_OFF 0 // 0...00000
|
|
#define HTTP_LOG_LEVEL_ERROR (HTTP_LOG_LEVEL_OFF | HTTP_LOG_FLAG_ERROR) // 0...00001
|
|
#define HTTP_LOG_LEVEL_WARN (HTTP_LOG_LEVEL_ERROR | HTTP_LOG_FLAG_WARN) // 0...00011
|
|
#define HTTP_LOG_LEVEL_INFO (HTTP_LOG_LEVEL_WARN | HTTP_LOG_FLAG_INFO) // 0...00111
|
|
#define HTTP_LOG_LEVEL_VERBOSE (HTTP_LOG_LEVEL_INFO | HTTP_LOG_FLAG_VERBOSE) // 0...01111
|
|
|
|
// Setup fine grained logging.
|
|
// The first 4 bits are being used by the standard log levels (0 - 3)
|
|
//
|
|
// We're going to add tracing, but NOT as a log level.
|
|
// Tracing can be turned on and off independently of log level.
|
|
|
|
#define HTTP_LOG_FLAG_TRACE (1 << 4) // 0...10000
|
|
|
|
// Setup the usual boolean macros.
|
|
|
|
#define HTTP_LOG_ERROR (httpLogLevel & HTTP_LOG_FLAG_ERROR)
|
|
#define HTTP_LOG_WARN (httpLogLevel & HTTP_LOG_FLAG_WARN)
|
|
#define HTTP_LOG_INFO (httpLogLevel & HTTP_LOG_FLAG_INFO)
|
|
#define HTTP_LOG_VERBOSE (httpLogLevel & HTTP_LOG_FLAG_VERBOSE)
|
|
#define HTTP_LOG_TRACE (httpLogLevel & HTTP_LOG_FLAG_TRACE)
|
|
|
|
// Configure asynchronous logging.
|
|
// We follow the default configuration,
|
|
// but we reserve a special macro to easily disable asynchronous logging for debugging purposes.
|
|
|
|
#define HTTP_LOG_ASYNC_ENABLED YES
|
|
|
|
#define HTTP_LOG_ASYNC_ERROR ( NO && HTTP_LOG_ASYNC_ENABLED)
|
|
#define HTTP_LOG_ASYNC_WARN (YES && HTTP_LOG_ASYNC_ENABLED)
|
|
#define HTTP_LOG_ASYNC_INFO (YES && HTTP_LOG_ASYNC_ENABLED)
|
|
#define HTTP_LOG_ASYNC_VERBOSE (YES && HTTP_LOG_ASYNC_ENABLED)
|
|
#define HTTP_LOG_ASYNC_TRACE (YES && HTTP_LOG_ASYNC_ENABLED)
|
|
|
|
// Define logging primitives.
|
|
|
|
#define HTTPLogError(frmt, ...) LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_ERROR, httpLogLevel, HTTP_LOG_FLAG_ERROR, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogWarn(frmt, ...) LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_WARN, httpLogLevel, HTTP_LOG_FLAG_WARN, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogInfo(frmt, ...) LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_INFO, httpLogLevel, HTTP_LOG_FLAG_INFO, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogVerbose(frmt, ...) LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_VERBOSE, httpLogLevel, HTTP_LOG_FLAG_VERBOSE, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogTrace() LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_TRACE, httpLogLevel, HTTP_LOG_FLAG_TRACE, \
|
|
HTTP_LOG_CONTEXT, @"%@[%p]: %@", THIS_FILE, self, THIS_METHOD)
|
|
|
|
#define HTTPLogTrace2(frmt, ...) LOG_OBJC_MAYBE(HTTP_LOG_ASYNC_TRACE, httpLogLevel, HTTP_LOG_FLAG_TRACE, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
|
|
#define HTTPLogCError(frmt, ...) LOG_C_MAYBE(HTTP_LOG_ASYNC_ERROR, httpLogLevel, HTTP_LOG_FLAG_ERROR, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogCWarn(frmt, ...) LOG_C_MAYBE(HTTP_LOG_ASYNC_WARN, httpLogLevel, HTTP_LOG_FLAG_WARN, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogCInfo(frmt, ...) LOG_C_MAYBE(HTTP_LOG_ASYNC_INFO, httpLogLevel, HTTP_LOG_FLAG_INFO, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogCVerbose(frmt, ...) LOG_C_MAYBE(HTTP_LOG_ASYNC_VERBOSE, httpLogLevel, HTTP_LOG_FLAG_VERBOSE, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|
|
#define HTTPLogCTrace() LOG_C_MAYBE(HTTP_LOG_ASYNC_TRACE, httpLogLevel, HTTP_LOG_FLAG_TRACE, \
|
|
HTTP_LOG_CONTEXT, @"%@[%p]: %@", THIS_FILE, self, __FUNCTION__)
|
|
|
|
#define HTTPLogCTrace2(frmt, ...) LOG_C_MAYBE(HTTP_LOG_ASYNC_TRACE, httpLogLevel, HTTP_LOG_FLAG_TRACE, \
|
|
HTTP_LOG_CONTEXT, frmt, ##__VA_ARGS__)
|
|
|