diff options
author | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2011-08-12 00:30:28 +0000 |
---|---|---|
committer | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2011-08-12 00:30:28 +0000 |
commit | 8dc3f2a50d2a07fb21efeaf17669c9aafe0c25fe (patch) | |
tree | bb808cd7f8b488b7595bc6e7535df76336eebee5 /Foundation | |
parent | 24b6e2d377ad55e269297977ade4bfd98df7fc5a (diff) |
[Author: aharper]
Add a log filter that filters by simple level comparisons.
R=dmaclach,thomasvl
APPROVED=dmaclach
Diffstat (limited to 'Foundation')
-rw-r--r-- | Foundation/GTMLogger.h | 18 | ||||
-rw-r--r-- | Foundation/GTMLogger.m | 27 | ||||
-rw-r--r-- | Foundation/GTMLoggerTest.m | 66 |
3 files changed, 110 insertions, 1 deletions
diff --git a/Foundation/GTMLogger.h b/Foundation/GTMLogger.h index 9fd2362..4355292 100644 --- a/Foundation/GTMLogger.h +++ b/Foundation/GTMLogger.h @@ -448,10 +448,26 @@ typedef enum { @interface GTMLogLevelFilter : NSObject <GTMLogFilter> @end // GTMLogLevelFilter - // A simple log filter that does NOT filter anything out; // -filterAllowsMessage:level will always return YES. This can be a convenient // way to enable debug-level logging in release builds (if you so desire). @interface GTMLogNoFilter : NSObject <GTMLogFilter> @end // GTMLogNoFilter +// A log filter that filters messages below a specified level. Intended for +// use where finer control than all (GTMLogNoFilter) or heavy filter +// (GTMLogLevelFilter) isn't appropriate. +@interface GTMLogCustomLevelFilter : NSObject <GTMLogFilter> { + @private + GTMLoggerLevel filterLevel_; +} + +// Designated initializer, logs at levels < |level| will be filtered. +// |level| cannot exceed kGTMLoggerLevelAssert +- (id)initWithFilterLevel:(GTMLoggerLevel)level; + +@end // GTMLogLevelFilter + + + + diff --git a/Foundation/GTMLogger.m b/Foundation/GTMLogger.m index 3f91bba..a673d23 100644 --- a/Foundation/GTMLogger.m +++ b/Foundation/GTMLogger.m @@ -507,3 +507,30 @@ static BOOL IsVerboseLoggingEnabled(void) { } @end // GTMLogNoFilter + + +@implementation GTMLogCustomLevelFilter + +- (id)init { + // Use error level for default init. + return [self initWithFilterLevel:kGTMLoggerLevelError]; +} + +- (id)initWithFilterLevel:(GTMLoggerLevel)level { + self = [super init]; + if (self != nil) { + filterLevel_ = level; + // Cap max level + if (filterLevel_ > kGTMLoggerLevelAssert) { + [self release]; + return nil; + } + } + return self; +} + +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { + return (level >= filterLevel_) ? YES : NO; +} + +@end diff --git a/Foundation/GTMLoggerTest.m b/Foundation/GTMLoggerTest.m index 0dc7689..2d783ca 100644 --- a/Foundation/GTMLoggerTest.m +++ b/Foundation/GTMLoggerTest.m @@ -474,6 +474,72 @@ STAssertTrue([filter filterAllowsMessage:nil level:kGTMLoggerLevelDebug], nil); } +- (void)testCustomFilter { + // Default level is kGTMLoggerLevelError + id<GTMLogFilter> filter = [[[GTMLogCustomLevelFilter alloc] init] + autorelease]; + STAssertNotNil(filter, nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], + nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], + nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], + nil); + + // Custom level is possible + filter = [[[GTMLogCustomLevelFilter alloc] + initWithFilterLevel:kGTMLoggerLevelInfo] autorelease]; + STAssertNotNil(filter, nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], + nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], + nil); + + // Custom level is possible + filter = [[[GTMLogCustomLevelFilter alloc] + initWithFilterLevel:kGTMLoggerLevelInfo] autorelease]; + STAssertNotNil(filter, nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], + nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], + nil); + + filter = [[[GTMLogCustomLevelFilter alloc] + initWithFilterLevel:kGTMLoggerLevelDebug] autorelease]; + STAssertNotNil(filter, nil); + STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], + nil); + STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], + nil); + + // Cannot exceed assert level filter + filter = [[[GTMLogCustomLevelFilter alloc] + initWithFilterLevel:kGTMLoggerLevelAssert + 1] autorelease]; + STAssertNil(filter, nil); +} + - (void)testFileHandleCreation { NSFileHandle *fh = nil; |