From ff8dfe2636b6469daf1a13c3305d17d375f80809 Mon Sep 17 00:00:00 2001 From: thomasvl Date: Wed, 29 Oct 2014 15:30:57 +0000 Subject: Cache the verbosity level instead of fetching constantly. --- Foundation/GTMLogger.h | 5 ++++- Foundation/GTMLogger.m | 34 +++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) (limited to 'Foundation') 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 +@interface GTMLogLevelFilter : NSObject { + @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 -- cgit v1.2.3