Skip to content

Revert "GULLogger - count errors and warnigns" #2714

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 3, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 9 additions & 73 deletions GoogleUtilities/Example/Tests/Logger/GULLoggerTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,13 @@

extern BOOL getGULLoggerDebugMode(void);

extern CFStringRef getGULLoggerUserDefaultsSuiteName(void);
extern dispatch_queue_t getGULLoggerCounterQueue(void);

static NSString *const kMessageCode = @"I-COR000001";

@interface GULLoggerTest : XCTestCase

@property(nonatomic) NSString *randomLogString;
@property(nonatomic) NSUserDefaults *loggerDefaults;

@property(nonatomic, strong) NSUserDefaults *defaults;

@end

Expand All @@ -50,18 +48,14 @@ - (void)setUp {
[super setUp];
GULResetLogger();

self.loggerDefaults = [[NSUserDefaults alloc]
initWithSuiteName:CFBridgingRelease(getGULLoggerUserDefaultsSuiteName())];
// Stub NSUserDefaults for cleaner testing.
_defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.google.logger_test"];
}

- (void)tearDown {
// Make sure all async operations have finished before starting a new test.
[self drainQueue:getGULClientQueue()];
[self drainQueue:getGULLoggerCounterQueue()];

self.loggerDefaults = nil;

[super tearDown];

_defaults = nil;
}

- (void)testMessageCodeFormat {
Expand Down Expand Up @@ -159,61 +153,17 @@ - (void)testGULLoggerLevelValues {
XCTAssertEqual(GULLoggerLevelDebug, ASL_LEVEL_DEBUG);
}

- (void)testGetErrorWarningNumberBeforeLogDontCrash {
GULResetLogger();

XCTAssertNoThrow(GULNumberOfErrorsLogged());
XCTAssertNoThrow(GULNumberOfWarningsLogged());
}

- (void)testErrorNumberIncrement {
[self.loggerDefaults setInteger:10 forKey:kGULLoggerErrorCountKey];

GULLogError(@"my service", NO, kMessageCode, @"Message.");

[self drainQueue:getGULLoggerCounterQueue()];
XCTAssertEqual(GULNumberOfErrorsLogged(), 11);
}

- (void)testWarningNumberIncrement {
[self.loggerDefaults setInteger:5 forKey:kGULLoggerWarningCountKey];

GULLogWarning(@"my service", NO, kMessageCode, @"Message.");

[self drainQueue:getGULLoggerCounterQueue()];
XCTAssertEqual(GULNumberOfWarningsLogged(), 6);
}

- (void)testResetIssuesCount {
[self.loggerDefaults setInteger:3 forKey:kGULLoggerErrorCountKey];
[self.loggerDefaults setInteger:4 forKey:kGULLoggerWarningCountKey];

GULResetNumberOfIssuesLogged();

XCTAssertEqual(GULNumberOfErrorsLogged(), 0);
XCTAssertEqual(GULNumberOfWarningsLogged(), 0);
}

- (void)testNumberOfIssuesLoggedNoDeadlock {
[self dispatchSyncNestedDispatchCount:100
queue:getGULLoggerCounterQueue()
block:^{
XCTAssertNoThrow(GULNumberOfErrorsLogged());
XCTAssertNoThrow(GULNumberOfWarningsLogged());
}];
}

// Helper functions.
- (BOOL)logExists {
[self drainQueue:getGULClientQueue()];
[self drainGULClientQueue];
NSString *correctMsg =
[NSString stringWithFormat:@"%@[%@] %@", @"my service", kMessageCode, self.randomLogString];
return [self messageWasLogged:correctMsg];
}

- (void)drainQueue:(dispatch_queue_t)queue {
- (void)drainGULClientQueue {
dispatch_semaphore_t workerSemaphore = dispatch_semaphore_create(0);
dispatch_barrier_async(queue, ^{
dispatch_async(getGULClientQueue(), ^{
dispatch_semaphore_signal(workerSemaphore);
});
dispatch_semaphore_wait(workerSemaphore, DISPATCH_TIME_FOREVER);
Expand Down Expand Up @@ -241,19 +191,5 @@ - (BOOL)messageWasLogged:(NSString *)message {
#pragma clang pop
}

- (void)dispatchSyncNestedDispatchCount:(NSInteger)count
queue:(dispatch_queue_t)queue
block:(dispatch_block_t)block {
if (count < 0) {
return;
}

dispatch_sync(queue, ^{
[self dispatchSyncNestedDispatchCount:count - 1 queue:queue block:block];
block();
NSLog(@"%@, depth: %ld", NSStringFromSelector(_cmd), (long)count);
});
}

@end
#endif
88 changes: 0 additions & 88 deletions GoogleUtilities/Logger/GULLogger.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@
#import <GoogleUtilities/GULAppEnvironmentUtil.h>
#import "Public/GULLoggerLevel.h"

NSString *const kGULLoggerErrorCountKey = @"kGULLoggerErrorCountKey";
NSString *const kGULLoggerWarningCountKey = @"kGULLoggerWarningCountKey";

/// ASL client facility name used by GULLogger.
const char *kGULLoggerASLClientFacilityName = "com.google.utilities.logger";

Expand All @@ -46,8 +43,6 @@
static NSRegularExpression *sMessageCodeRegex;
#endif

void GULIncrementLogCountForLevel(GULLoggerLevel level);

void GULLoggerInitializeASL(void) {
dispatch_once(&sGULLoggerOnceToken, ^{
NSInteger majorOSVersion = [[GULAppEnvironmentUtil systemVersion] integerValue];
Expand Down Expand Up @@ -154,10 +149,6 @@ void GULLogBasic(GULLoggerLevel level,
NSString *message,
va_list args_ptr) {
GULLoggerInitializeASL();

// Keep count of how many errors and warnings are triggered.
GULIncrementLogCountForLevel(level);

if (!(level <= sGULLoggerMaximumLevel || sGULLoggerDebugMode || forceLog)) {
return;
}
Expand Down Expand Up @@ -203,85 +194,6 @@ void GULLogBasic(GULLoggerLevel level,

#undef GUL_MAKE_LOGGER

#pragma mark - User defaults

// NSUserDefaults cannot be used due to a bug described in GULUserDefaults
// GULUserDefaults cannot be used because GULLogger is a dependency for GULUserDefaults
// We have to use C API direclty here

CFStringRef getGULLoggerUserDefaultsSuiteName(void) {
return (__bridge CFStringRef) @"GoogleUtilities.Logger.GULLogger";
}

NSInteger GULGetUserDefaultsIntegerForKey(NSString *key) {
id value = (__bridge_transfer id)CFPreferencesCopyAppValue((__bridge CFStringRef)key,
getGULLoggerUserDefaultsSuiteName());
if (![value isKindOfClass:[NSNumber class]]) {
return 0;
}

return [(NSNumber *)value integerValue];
}

void GULLoggerUserDefaultsSetIntegerForKey(NSInteger count, NSString *key) {
NSNumber *countNumber = @(count);
CFPreferencesSetAppValue((__bridge CFStringRef)key, (__bridge CFNumberRef)countNumber,
getGULLoggerUserDefaultsSuiteName());
CFPreferencesAppSynchronize(getGULLoggerUserDefaultsSuiteName());
}

#pragma mark - Number of errors and warnings

dispatch_queue_t getGULLoggerCounterQueue(void) {
static dispatch_queue_t queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
queue =
dispatch_queue_create("GoogleUtilities.GULLogger.counterQueue", DISPATCH_QUEUE_CONCURRENT);
});

return queue;
}

NSInteger GULSyncGetUserDefaultsIntegerForKey(NSString *key) {
__block NSInteger integerValue = 0;
dispatch_sync(getGULLoggerCounterQueue(), ^{
integerValue = GULGetUserDefaultsIntegerForKey(key);
});

return integerValue;
}

NSInteger GULNumberOfErrorsLogged(void) {
return GULSyncGetUserDefaultsIntegerForKey(kGULLoggerErrorCountKey);
}

NSInteger GULNumberOfWarningsLogged(void) {
return GULSyncGetUserDefaultsIntegerForKey(kGULLoggerWarningCountKey);
}

void GULResetNumberOfIssuesLogged(void) {
dispatch_barrier_async(getGULLoggerCounterQueue(), ^{
GULLoggerUserDefaultsSetIntegerForKey(0, kGULLoggerErrorCountKey);
GULLoggerUserDefaultsSetIntegerForKey(0, kGULLoggerWarningCountKey);
});
}

void GULIncrementUserDefaultsIntegerForKey(NSString *key) {
NSInteger value = GULGetUserDefaultsIntegerForKey(key);
GULLoggerUserDefaultsSetIntegerForKey(value + 1, key);
}

void GULIncrementLogCountForLevel(GULLoggerLevel level) {
dispatch_barrier_async(getGULLoggerCounterQueue(), ^{
if (level == GULLoggerLevelError) {
GULIncrementUserDefaultsIntegerForKey(kGULLoggerErrorCountKey);
} else if (level == GULLoggerLevelWarning) {
GULIncrementUserDefaultsIntegerForKey(kGULLoggerWarningCountKey);
}
});
}

#pragma mark - GULLoggerWrapper

@implementation GULLoggerWrapper
Expand Down
27 changes: 0 additions & 27 deletions GoogleUtilities/Logger/Private/GULLogger.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,6 @@ NS_ASSUME_NONNULL_BEGIN
*/
typedef NSString *const GULLoggerService;

/**
* The key used to store the logger's error count.
*/
extern NSString *const kGULLoggerErrorCountKey;

/**
* The key used to store the logger's warning count.
*/
extern NSString *const kGULLoggerWarningCountKey;

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
Expand Down Expand Up @@ -139,23 +129,6 @@ extern void GULLogDebug(GULLoggerService service,
NSString *message,
...) NS_FORMAT_FUNCTION(4, 5);

/**
* Retrieve the number of errors that have been logged since the stat was last reset.
* Calling this method can be comparably expensive, so it should not be called from main thread.
*/
extern NSInteger GULNumberOfErrorsLogged(void);

/**
* Retrieve the number of warnings that have been logged since the stat was last reset.
* Calling this method can be comparably expensive, so it should not be called from main thread.
*/
extern NSInteger GULNumberOfWarningsLogged(void);

/**
* Reset number of errors and warnings that have been logged to 0.
*/
extern void GULResetNumberOfIssuesLogged(void);

#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
Expand Down