aboutsummaryrefslogtreecommitdiff
path: root/Foundation
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2011-08-12 00:30:28 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2011-08-12 00:30:28 +0000
commit8dc3f2a50d2a07fb21efeaf17669c9aafe0c25fe (patch)
treebb808cd7f8b488b7595bc6e7535df76336eebee5 /Foundation
parent24b6e2d377ad55e269297977ade4bfd98df7fc5a (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.h18
-rw-r--r--Foundation/GTMLogger.m27
-rw-r--r--Foundation/GTMLoggerTest.m66
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;