blob: f8e3cf58eaa1156e892fb11abec5650f3a2e574d [file] [log] [blame]
#import "ContextFilterAppDelegate.h"
#import <CocoaLumberjack/CocoaLumberjack.h>
#import "MyContextFilter.h"
#import "ThirdPartyFramework.h"
// Log levels: off, error, warn, info, verbose
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
@implementation ContextFilterAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Our application adopts a "third party framework" which also uses the lumberjack framework.
// We love this because it greatly improves our ability to observe, debug, and diagnose problems!
//
// Now sometimes we want to see the third party framework log messages in our Xcode console.
// And sometimes we don't (for whatever reason).
//
// We can accomplish this with the use of log message contexts.
// Each log message has an associated context.
// The context itself is simply an integer, and the default context is zero.
// However, third party frameworks that employ lumberjack will likely use a custom non-zero context.
//
// For example, the CocoaHTTPServer project defines it's own internal log statments:
//
// HTTPLogWarn(@"File not found - %@", filePath);
//
// As part of its logging setup, it defines its own custom logging context:
//
// #define HTTP_LOG_CONTEXT 80
//
// And each HTTPLog message uses this HTTP_LOG_CONTEXT instead of the default context.
// This means that we can tell if log messages are coming from our code or from the framework.
// We're going to tap into this ability to filter out log messages from our "third party framework".
// We want all log messages (from our code or the third party framework) to show up in the Xcode console.
[DDLog addLogger:[DDTTYLogger sharedInstance]];
// If we want to filter log messages from the third party framework, we can do this:
MyContextFilter *filter = [[MyContextFilter alloc] init];
[[DDTTYLogger sharedInstance] setLogFormatter:filter];
// Now start up a timer to create some fake log messages for this example
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fire:) userInfo:nil repeats:YES];
// Start the third party framework,
// which will create a similar fake timer.
[ThirdPartyFramework start];
}
- (void)fire:(NSTimer *)timer
{
DDLogVerbose(@"Log message from our code");
}
@end