ExampleLogger/ExampleTextView.m (66 lines of code) (raw):
//
// ExampleTextView.m
// TwitterLoggingService
//
// Created on 12/24/13.
// Copyright (c) 2016 Twitter, Inc.
//
#import "ExampleTextView.h"
#import "TLSLoggingService+ExampleAdditions.h"
@implementation ExampleTextView
{
NSString *_buffer;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_buffer = @"";
_permittedLoggingLevels = TLSLogLevelMaskAll;
super.editable = NO;
}
return self;
}
- (void)setEditable:(BOOL)editable
{
// noop
}
- (IBAction)clear:(id)sender
{
self.text = @"";
[[TLSLoggingService sharedInstance] dispatchAsynchronousTransaction:^{
self->_buffer = @"";
}];
}
#pragma mark - TLSFiltering
- (void)setPermittedLoggingLevels:(TLSLogLevelMask)permittedLoggingLevels
{
[[TLSLoggingService sharedInstance] updateOutputStream:self];
}
- (TLSFilterStatus)tls_shouldFilterLevel:(TLSLogLevel)level channel:(NSString *)channel contextObject:(id)contextObject
{
if (0 == (self.permittedLoggingLevels & (1 << level))) {
return TLSFilterStatusCannotLogLevel;
}
if (![[TLSLoggingService sharedInstance] isChannelOnViaTransactionQueue:channel]) {
return TLSFilterStatusCannotLogChannel;
}
return TLSFilterStatusOK;
}
#pragma mark - TLSOutputStream
- (void)tls_outputLogInfo:(TLSLogMessageInfo *)logInfo
{
@autoreleasepool {
_buffer = [_buffer stringByAppendingFormat:@"%@\n", logInfo.composeFormattedMessage];
}
NSString *buffer = _buffer;
dispatch_async(dispatch_get_main_queue(), ^() {
self.text = buffer;
});
}
#pragma mark - TLSDataRetrieval
- (NSData *)tls_retrieveLoggedData:(NSUInteger)maxBytes
{
NSData *data = [_buffer dataUsingEncoding:self.tls_loggedDataEncoding];
if (data.length > maxBytes) {
data = [data subdataWithRange:NSMakeRange(data.length - maxBytes, maxBytes)];
}
return data;
}
- (NSStringEncoding)tls_loggedDataEncoding
{
return NSUTF8StringEncoding;
}
@end