ExampleLogger/TLSLoggingService+ExampleAdditions.m (74 lines of code) (raw):
//
// TLSLoggingService+ExampleAdditions.m
// TwitterLoggingService
//
// Created on 12/24/13.
// Copyright (c) 2016 Twitter, Inc.
//
#import "ExampleTextView.h"
#import "TLSLoggingService+ExampleAdditions.h"
NSString * const ExampleLogChannelOne = @"One";
NSString * const ExampleLogChannelTwo = @"Two";
NSString * const ExampleLogChannelThree = @"Three";
static ExampleTextView *gTextView = nil;
static NSMutableSet *sOnChannels = nil;
@interface ExampleNSLogOutputStream : TLSNSLogOutputStream
@end
@interface ExampleCrashlyticsOutputStream : TLSCrashlyticsOutputStream
@end
@implementation TLSLoggingService (ExampleAdditions)
+ (void)prepareExample
{
sOnChannels = [[NSMutableSet alloc] init];
TLSLoggingService *manager = [TLSLoggingService sharedInstance];
[manager addOutputStream:[[TLSRollingFileOutputStream alloc] initAndReturnError:NULL]];
[manager addOutputStream:[[ExampleNSLogOutputStream alloc] init]];
[manager addOutputStream:[[ExampleCrashlyticsOutputStream alloc] init]]; // no-op since we don't have Crashlytics in the demo
gTextView = [[ExampleTextView alloc] initWithFrame:CGRectZero];
[manager addOutputStream:gTextView];
[manager setChannels:@[TLSLogChannelDefault, ExampleLogChannelOne, ExampleLogChannelTwo, ExampleLogChannelThree] on:YES];
}
- (BOOL)isChannelOnViaTransactionQueue:(NSString *)channel
{
return [sOnChannels containsObject:channel];
}
- (BOOL)isChannelOn:(NSString *)channel
{
__block BOOL on;
[self dispatchSynchronousTransaction:^{
on = [self isChannelOnViaTransactionQueue:channel];
}];
return on;
}
- (void)setChannel:(NSString *)channel on:(BOOL)on
{
[self setChannels:@[channel] on:on];
}
- (void)setChannels:(NSArray *)channels on:(BOOL)on
{
[self dispatchAsynchronousTransaction:^{
for (NSString *channel in channels) {
if (on) {
[sOnChannels addObject:channel];
} else {
[sOnChannels removeObject:channel];
}
}
}];
}
- (ExampleTextView *)globalLogTextView
{
return gTextView;
}
@end
@implementation ExampleNSLogOutputStream
- (TLSFilterStatus)tls_shouldFilterLevel:(TLSLogLevel)level channel:(NSString *)channel contextObject:(id)contextObject
{
return [gTextView tls_shouldFilterLevel:level channel:channel contextObject:contextObject];
}
@end
@implementation ExampleCrashlyticsOutputStream
- (TLSFilterStatus)tls_shouldFilterLevel:(TLSLogLevel)level channel:(NSString *)channel contextObject:(id)contextObject
{
if (TLSLogLevelWarning < level) {
return TLSFilterStatusCannotLogLevel;
}
return TLSFilterStatusOK;
}
- (void)outputLogMessageToCrashlytics:(nonnull NSString *)message
{
// no-op for this demo
}
/*
Normally would uncomment below to for the crashlytics subclass
*/
// TLS_OUTPUTLOGMESSAGETOCRASHLYTICS_DEFAULT_IMPL;
@end