aboutsummaryrefslogtreecommitdiff
path: root/Foundation
diff options
context:
space:
mode:
authorGravatar thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2014-10-29 15:30:57 +0000
committerGravatar thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2014-10-29 15:30:57 +0000
commitff8dfe2636b6469daf1a13c3305d17d375f80809 (patch)
tree4307d94a571755c5d32753839f4364215127f428 /Foundation
parentfc407a14bdcddb41db5804962b496c4e3e860f78 (diff)
Cache the verbosity level instead of fetching constantly.
Diffstat (limited to 'Foundation')
-rw-r--r--Foundation/GTMLogger.h5
-rw-r--r--Foundation/GTMLogger.m34
2 files changed, 33 insertions, 6 deletions
diff --git a/Foundation/GTMLogger.h b/Foundation/GTMLogger.h
index c4fd140..e71d56d 100644
--- a/Foundation/GTMLogger.h
+++ b/Foundation/GTMLogger.h
@@ -454,7 +454,10 @@ typedef enum {
// out of non-debug builds unless GTMVerboseLogging is set in the environment or
// the processes's defaults. Messages at the kGTMLoggerLevelError level are
// never filtered.
-@interface GTMLogLevelFilter : NSObject <GTMLogFilter>
+@interface GTMLogLevelFilter : NSObject <GTMLogFilter> {
+ @private
+ BOOL verboseLoggingEnabled_;
+}
@end // GTMLogLevelFilter
// A simple log filter that does NOT filter anything out;
diff --git a/Foundation/GTMLogger.m b/Foundation/GTMLogger.m
index ebc5836..90fce3e 100644
--- a/Foundation/GTMLogger.m
+++ b/Foundation/GTMLogger.m
@@ -97,7 +97,7 @@ static GTMLogger *gSharedLogger = nil;
// Don't trust NSFileHandle not to throw
@try {
- GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init]
+ GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init]
autorelease];
GTMLogger *stdoutLogger =
[self loggerWithWriter:[NSFileHandle fileHandleWithStandardOutput]
@@ -475,9 +475,6 @@ static GTMLogger *gSharedLogger = nil;
@end // GTMLogStandardFormatter
-
-@implementation GTMLogLevelFilter
-
// Check the environment and the user preferences for the GTMVerboseLogging key
// to see if verbose logging has been enabled. The environment variable will
// override the defaults setting, so check the environment first.
@@ -502,6 +499,29 @@ static BOOL IsVerboseLoggingEnabled(void) {
}
// COV_NF_END
+@implementation GTMLogLevelFilter
+
+- (id)init {
+ self = [super init];
+ if (self) {
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(defaultsChanged:)
+ name:NSUserDefaultsDidChangeNotification
+ object:nil];
+
+ verboseLoggingEnabled_ = IsVerboseLoggingEnabled();
+ }
+
+ return self;
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:NSUserDefaultsDidChangeNotification
+ object:nil];
+ [super dealloc];
+}
+
// In DEBUG builds, log everything. If we're not in a debug build we'll assume
// that we're in a Release build.
- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level {
@@ -516,7 +536,7 @@ static BOOL IsVerboseLoggingEnabled(void) {
allow = NO;
break;
case kGTMLoggerLevelInfo:
- allow = IsVerboseLoggingEnabled();
+ allow = verboseLoggingEnabled_;
break;
case kGTMLoggerLevelError:
allow = YES;
@@ -532,6 +552,10 @@ static BOOL IsVerboseLoggingEnabled(void) {
return allow;
}
+- (void)defaultsChanged:(NSNotification *)note {
+ verboseLoggingEnabled_ = IsVerboseLoggingEnabled();
+}
+
@end // GTMLogLevelFilter