blob: 53bfbf000388d892c09d7f4886abd0e26e6fb505 [file] [log] [blame]
#import "OverflowTestMacAppDelegate.h"
#import "DDLog.h"
#import "DDASLLogger.h"
#import "DDTTYLogger.h"
#import "SlowLogger.h"
// Debug levels: off, error, warn, info, verbose
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
@implementation OverflowTestMacAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Since logging can be asynchronous, its possible for rogue threads to flood the logging queue.
// That is, to issue an abundance of log statements faster than the logging thread can keepup.
// Typically such a scenario occurs when log statements are added haphazardly within large loops,
// but may also be possible if relatively slow loggers are being used.
//
// Lumberjack has the ability to cap the queue size at a given number of outstanding log statements.
// If a thread attempts to issue a log statement when the queue is already maxed out,
// the issuing thread will block until the queue size drops below the max again.
//
// This Xcode project demonstrates this feature by using a "Slow Logger".
NSLog(@"How to use this test:");
NSLog(@"1. Set the DEBUG definition to YES in DDLog.m");
NSLog(@"2. Set the LOG_MAX_QUEUE_SIZE definition to 5 in DDLog.m\n\n");
SlowLogger *slowLogger = [[SlowLogger alloc] init];
[DDLog addLogger:slowLogger];
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
[NSThread detachNewThreadSelector:@selector(bgThread1) toTarget:self withObject:nil];
[NSThread detachNewThreadSelector:@selector(bgThread2) toTarget:self withObject:nil];
NSLog(@"mainThread");
for (int i = 0; i < 10; i++)
{
DDLogVerbose(@"mainThread: %i", i);
}
[DDLog flushLog];
}
- (void)bgThread1
{
@autoreleasepool {
NSLog(@"bgThread1");
for (int i = 0; i < 10; i++)
{
DDLogVerbose(@"bgThread1 : %i", i);
}
}
}
- (void)bgThread2
{
@autoreleasepool {
NSLog(@"bgThread2");
for (int i = 0; i < 10; i++)
{
DDLogVerbose(@"bgThread2 : %i", i);
}
}
}
@end