Index: obsolete/breakpad/common/mac/GTMLogger.m |
diff --git a/obsolete/breakpad/common/mac/GTMLogger.m b/obsolete/breakpad/common/mac/GTMLogger.m |
deleted file mode 100644 |
index de941d2e83188ffc314b953d96c45f9e3a1785fc..0000000000000000000000000000000000000000 |
--- a/obsolete/breakpad/common/mac/GTMLogger.m |
+++ /dev/null |
@@ -1,445 +0,0 @@ |
-// |
-// GTMLogger.m |
-// |
-// Copyright 2007-2008 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not |
-// use this file except in compliance with the License. You may obtain a copy |
-// of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
-// License for the specific language governing permissions and limitations under |
-// the License. |
-// |
- |
-#import "GTMLogger.h" |
-#import "GTMGarbageCollection.h" |
-#import <fcntl.h> |
-#import <unistd.h> |
-#import <stdlib.h> |
-#import <pthread.h> |
- |
- |
-// Define a trivial assertion macro to avoid dependencies |
-#ifdef DEBUG |
- #define GTMLOGGER_ASSERT(expr) assert(expr) |
-#else |
- #define GTMLOGGER_ASSERT(expr) |
-#endif |
- |
- |
-@interface GTMLogger (PrivateMethods) |
- |
-- (void)logInternalFunc:(const char *)func |
- format:(NSString *)fmt |
- valist:(va_list)args |
- level:(GTMLoggerLevel)level; |
- |
-@end |
- |
- |
-// Reference to the shared GTMLogger instance. This is not a singleton, it's |
-// just an easy reference to one shared instance. |
-static GTMLogger *gSharedLogger = nil; |
- |
- |
-@implementation GTMLogger |
- |
-// Returns a pointer to the shared logger instance. If none exists, a standard |
-// logger is created and returned. |
-+ (id)sharedLogger { |
- @synchronized(self) { |
- if (gSharedLogger == nil) { |
- gSharedLogger = [[self standardLogger] retain]; |
- } |
- GTMLOGGER_ASSERT(gSharedLogger != nil); |
- } |
- return [[gSharedLogger retain] autorelease]; |
-} |
- |
-+ (void)setSharedLogger:(GTMLogger *)logger { |
- @synchronized(self) { |
- [gSharedLogger autorelease]; |
- gSharedLogger = [logger retain]; |
- } |
-} |
- |
-+ (id)standardLogger { |
- id<GTMLogWriter> writer = [NSFileHandle fileHandleWithStandardOutput]; |
- id<GTMLogFormatter> fr = [[[GTMLogStandardFormatter alloc] init] autorelease]; |
- id<GTMLogFilter> filter = [[[GTMLogLevelFilter alloc] init] autorelease]; |
- return [self loggerWithWriter:writer formatter:fr filter:filter]; |
-} |
- |
-+ (id)standardLoggerWithStderr { |
- id me = [self standardLogger]; |
- [me setWriter:[NSFileHandle fileHandleWithStandardError]]; |
- return me; |
-} |
- |
-+ (id)standardLoggerWithPath:(NSString *)path { |
- NSFileHandle *fh = [NSFileHandle fileHandleForLoggingAtPath:path mode:0644]; |
- if (fh == nil) return nil; |
- id me = [self standardLogger]; |
- [me setWriter:fh]; |
- return me; |
-} |
- |
-+ (id)loggerWithWriter:(id<GTMLogWriter>)writer |
- formatter:(id<GTMLogFormatter>)formatter |
- filter:(id<GTMLogFilter>)filter { |
- return [[[self alloc] initWithWriter:writer |
- formatter:formatter |
- filter:filter] autorelease]; |
-} |
- |
-+ (id)logger { |
- return [[[self alloc] init] autorelease]; |
-} |
- |
-- (id)init { |
- return [self initWithWriter:nil formatter:nil filter:nil]; |
-} |
- |
-- (id)initWithWriter:(id<GTMLogWriter>)writer |
- formatter:(id<GTMLogFormatter>)formatter |
- filter:(id<GTMLogFilter>)filter { |
- if ((self = [super init])) { |
- [self setWriter:writer]; |
- [self setFormatter:formatter]; |
- [self setFilter:filter]; |
- GTMLOGGER_ASSERT(formatter_ != nil); |
- GTMLOGGER_ASSERT(filter_ != nil); |
- GTMLOGGER_ASSERT(writer_ != nil); |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- GTMLOGGER_ASSERT(writer_ != nil); |
- GTMLOGGER_ASSERT(formatter_ != nil); |
- GTMLOGGER_ASSERT(filter_ != nil); |
- [writer_ release]; |
- [formatter_ release]; |
- [filter_ release]; |
- [super dealloc]; |
-} |
- |
-- (id<GTMLogWriter>)writer { |
- GTMLOGGER_ASSERT(writer_ != nil); |
- return [[writer_ retain] autorelease]; |
-} |
- |
-- (void)setWriter:(id<GTMLogWriter>)writer { |
- @synchronized(self) { |
- [writer_ autorelease]; |
- if (writer == nil) |
- writer_ = [[NSFileHandle fileHandleWithStandardOutput] retain]; |
- else |
- writer_ = [writer retain]; |
- } |
- GTMLOGGER_ASSERT(writer_ != nil); |
-} |
- |
-- (id<GTMLogFormatter>)formatter { |
- GTMLOGGER_ASSERT(formatter_ != nil); |
- return [[formatter_ retain] autorelease]; |
-} |
- |
-- (void)setFormatter:(id<GTMLogFormatter>)formatter { |
- @synchronized(self) { |
- [formatter_ autorelease]; |
- if (formatter == nil) |
- formatter_ = [[GTMLogBasicFormatter alloc] init]; |
- else |
- formatter_ = [formatter retain]; |
- } |
- GTMLOGGER_ASSERT(formatter_ != nil); |
-} |
- |
-- (id<GTMLogFilter>)filter { |
- GTMLOGGER_ASSERT(filter_ != nil); |
- return [[filter_ retain] autorelease]; |
-} |
- |
-- (void)setFilter:(id<GTMLogFilter>)filter { |
- @synchronized(self) { |
- [filter_ autorelease]; |
- if (filter == nil) |
- filter_ = [[GTMLogNoFilter alloc] init]; |
- else |
- filter_ = [filter retain]; |
- } |
- GTMLOGGER_ASSERT(filter_ != nil); |
-} |
- |
-- (void)logDebug:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelDebug]; |
- va_end(args); |
-} |
- |
-- (void)logInfo:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelInfo]; |
- va_end(args); |
-} |
- |
-- (void)logError:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelError]; |
- va_end(args); |
-} |
- |
-- (void)logAssert:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelAssert]; |
- va_end(args); |
-} |
- |
-@end // GTMLogger |
- |
- |
-@implementation GTMLogger (GTMLoggerMacroHelpers) |
- |
-- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelDebug]; |
- va_end(args); |
-} |
- |
-- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelInfo]; |
- va_end(args); |
-} |
- |
-- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelError]; |
- va_end(args); |
-} |
- |
-- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... { |
- va_list args; |
- va_start(args, fmt); |
- [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelAssert]; |
- va_end(args); |
-} |
- |
-@end // GTMLoggerMacroHelpers |
- |
- |
-@implementation GTMLogger (PrivateMethods) |
- |
-- (void)logInternalFunc:(const char *)func |
- format:(NSString *)fmt |
- valist:(va_list)args |
- level:(GTMLoggerLevel)level { |
- GTMLOGGER_ASSERT(formatter_ != nil); |
- GTMLOGGER_ASSERT(filter_ != nil); |
- GTMLOGGER_ASSERT(writer_ != nil); |
- |
- NSString *fname = func ? [NSString stringWithUTF8String:func] : nil; |
- NSString *msg = [formatter_ stringForFunc:fname |
- withFormat:fmt |
- valist:args |
- level:level]; |
- if (msg && [filter_ filterAllowsMessage:msg level:level]) |
- [writer_ logMessage:msg level:level]; |
-} |
- |
-@end // PrivateMethods |
- |
- |
-@implementation NSFileHandle (GTMFileHandleLogWriter) |
- |
-+ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode { |
- int fd = -1; |
- if (path) { |
- int flags = O_WRONLY | O_APPEND | O_CREAT; |
- fd = open([path fileSystemRepresentation], flags, mode); |
- } |
- if (fd == -1) return nil; |
- return [[[self alloc] initWithFileDescriptor:fd |
- closeOnDealloc:YES] autorelease]; |
-} |
- |
-- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { |
- @synchronized(self) { |
- NSString *line = [NSString stringWithFormat:@"%@\n", msg]; |
- [self writeData:[line dataUsingEncoding:NSUTF8StringEncoding]]; |
- } |
-} |
- |
-@end // GTMFileHandleLogWriter |
- |
- |
-@implementation NSArray (GTMArrayCompositeLogWriter) |
- |
-- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { |
- @synchronized(self) { |
- id<GTMLogWriter> child = nil; |
- GTM_FOREACH_OBJECT(child, self) { |
- if ([child conformsToProtocol:@protocol(GTMLogWriter)]) |
- [child logMessage:msg level:level]; |
- } |
- } |
-} |
- |
-@end // GTMArrayCompositeLogWriter |
- |
- |
-@implementation GTMLogger (GTMLoggerLogWriter) |
- |
-- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { |
- switch (level) { |
- case kGTMLoggerLevelDebug: |
- [self logDebug:@"%@", msg]; |
- break; |
- case kGTMLoggerLevelInfo: |
- [self logInfo:@"%@", msg]; |
- break; |
- case kGTMLoggerLevelError: |
- [self logError:@"%@", msg]; |
- break; |
- case kGTMLoggerLevelAssert: |
- [self logAssert:@"%@", msg]; |
- break; |
- default: |
- // Ignore the message. |
- break; |
- } |
-} |
- |
-@end // GTMLoggerLogWriter |
- |
- |
-@implementation GTMLogBasicFormatter |
- |
-- (NSString *)stringForFunc:(NSString *)func |
- withFormat:(NSString *)fmt |
- valist:(va_list)args |
- level:(GTMLoggerLevel)level { |
- // Performance note: since we always have to create a new NSString from the |
- // returned CFStringRef, we may want to do a quick check here to see if |fmt| |
- // contains a '%', and if not, simply return 'fmt'. |
- CFStringRef cfmsg = NULL; |
- cfmsg = CFStringCreateWithFormatAndArguments(kCFAllocatorDefault, |
- NULL, // format options |
- (CFStringRef)fmt, |
- args); |
- return GTMCFAutorelease(cfmsg); |
-} |
- |
-@end // GTMLogBasicFormatter |
- |
- |
-@implementation GTMLogStandardFormatter |
- |
-- (id)init { |
- if ((self = [super init])) { |
- dateFormatter_ = [[NSDateFormatter alloc] init]; |
- [dateFormatter_ setFormatterBehavior:NSDateFormatterBehavior10_4]; |
- [dateFormatter_ setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"]; |
- pname_ = [[[NSProcessInfo processInfo] processName] copy]; |
- pid_ = [[NSProcessInfo processInfo] processIdentifier]; |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- [dateFormatter_ release]; |
- [pname_ release]; |
- [super dealloc]; |
-} |
- |
-- (NSString *)stringForFunc:(NSString *)func |
- withFormat:(NSString *)fmt |
- valist:(va_list)args |
- level:(GTMLoggerLevel)level { |
- GTMLOGGER_ASSERT(dateFormatter_ != nil); |
- NSString *tstamp = nil; |
- @synchronized (dateFormatter_) { |
- tstamp = [dateFormatter_ stringFromDate:[NSDate date]]; |
- } |
- return [NSString stringWithFormat:@"%@ %@[%d/%p] [lvl=%d] %@ %@", |
- tstamp, pname_, pid_, pthread_self(), |
- level, (func ? func : @"(no func)"), |
- [super stringForFunc:func withFormat:fmt valist:args level:level]]; |
-} |
- |
-@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. |
-// COV_NF_START |
-static BOOL IsVerboseLoggingEnabled(void) { |
- static NSString *const kVerboseLoggingKey = @"GTMVerboseLogging"; |
- static char *env = NULL; |
- if (env == NULL) |
- env = getenv([kVerboseLoggingKey UTF8String]); |
- |
- if (env && env[0]) { |
- return (strtol(env, NULL, 10) != 0); |
- } |
- |
- return [[NSUserDefaults standardUserDefaults] boolForKey:kVerboseLoggingKey]; |
-} |
-// COV_NF_END |
- |
-// 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 { |
-#if DEBUG |
- return YES; |
-#endif |
- |
- BOOL allow = YES; |
- |
- switch (level) { |
- case kGTMLoggerLevelDebug: |
- allow = NO; |
- break; |
- case kGTMLoggerLevelInfo: |
- allow = (IsVerboseLoggingEnabled() == YES); |
- break; |
- case kGTMLoggerLevelError: |
- allow = YES; |
- break; |
- case kGTMLoggerLevelAssert: |
- allow = YES; |
- break; |
- default: |
- allow = YES; |
- break; |
- } |
- |
- return allow; |
-} |
- |
-@end // GTMLogLevelFilter |
- |
- |
-@implementation GTMLogNoFilter |
- |
-- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { |
- return YES; // Allow everything through |
-} |
- |
-@end // GTMLogNoFilter |