1*bf47c682SAndroid Build Coastguard Worker/* 2*bf47c682SAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*bf47c682SAndroid Build Coastguard Worker * 4*bf47c682SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*bf47c682SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*bf47c682SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*bf47c682SAndroid Build Coastguard Worker * 8*bf47c682SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*bf47c682SAndroid Build Coastguard Worker * 10*bf47c682SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*bf47c682SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*bf47c682SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*bf47c682SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*bf47c682SAndroid Build Coastguard Worker * limitations under the License. 15*bf47c682SAndroid Build Coastguard Worker */ 16*bf47c682SAndroid Build Coastguard Worker 17*bf47c682SAndroid Build Coastguard Worker#import "WALTLogger.h" 18*bf47c682SAndroid Build Coastguard Worker 19*bf47c682SAndroid Build Coastguard Worker@implementation WALTLogger { 20*bf47c682SAndroid Build Coastguard Worker NSMutableString *_buffer; 21*bf47c682SAndroid Build Coastguard Worker} 22*bf47c682SAndroid Build Coastguard Worker 23*bf47c682SAndroid Build Coastguard Worker+ (instancetype)sessionLogger { 24*bf47c682SAndroid Build Coastguard Worker static WALTLogger *sessionLogger = nil; 25*bf47c682SAndroid Build Coastguard Worker static dispatch_once_t token; 26*bf47c682SAndroid Build Coastguard Worker dispatch_once(&token, ^{ 27*bf47c682SAndroid Build Coastguard Worker sessionLogger = [[self alloc] init]; 28*bf47c682SAndroid Build Coastguard Worker }); 29*bf47c682SAndroid Build Coastguard Worker return sessionLogger; 30*bf47c682SAndroid Build Coastguard Worker} 31*bf47c682SAndroid Build Coastguard Worker 32*bf47c682SAndroid Build Coastguard Worker- (instancetype)init { 33*bf47c682SAndroid Build Coastguard Worker if ((self = [super init])) { 34*bf47c682SAndroid Build Coastguard Worker _buffer = [[NSMutableString alloc] init]; 35*bf47c682SAndroid Build Coastguard Worker } 36*bf47c682SAndroid Build Coastguard Worker return self; 37*bf47c682SAndroid Build Coastguard Worker} 38*bf47c682SAndroid Build Coastguard Worker 39*bf47c682SAndroid Build Coastguard Worker- (void)appendString:(NSString *)string { 40*bf47c682SAndroid Build Coastguard Worker @synchronized (_buffer) { 41*bf47c682SAndroid Build Coastguard Worker [_buffer appendString:string]; 42*bf47c682SAndroid Build Coastguard Worker } 43*bf47c682SAndroid Build Coastguard Worker} 44*bf47c682SAndroid Build Coastguard Worker 45*bf47c682SAndroid Build Coastguard Worker- (void)appendFormat:(NSString *)format, ... { 46*bf47c682SAndroid Build Coastguard Worker va_list args; 47*bf47c682SAndroid Build Coastguard Worker va_start(args, format); 48*bf47c682SAndroid Build Coastguard Worker NSString *formatted = [[NSString alloc] initWithFormat:format arguments:args]; 49*bf47c682SAndroid Build Coastguard Worker [_buffer appendString:formatted]; 50*bf47c682SAndroid Build Coastguard Worker va_end(args); 51*bf47c682SAndroid Build Coastguard Worker} 52*bf47c682SAndroid Build Coastguard Worker 53*bf47c682SAndroid Build Coastguard Worker- (void)clear { 54*bf47c682SAndroid Build Coastguard Worker @synchronized (_buffer) { 55*bf47c682SAndroid Build Coastguard Worker [_buffer setString:[NSString string]]; 56*bf47c682SAndroid Build Coastguard Worker } 57*bf47c682SAndroid Build Coastguard Worker} 58*bf47c682SAndroid Build Coastguard Worker 59*bf47c682SAndroid Build Coastguard Worker- (BOOL)writeToURL:(NSURL *)url error:(NSError **)error { 60*bf47c682SAndroid Build Coastguard Worker @synchronized (_buffer) { 61*bf47c682SAndroid Build Coastguard Worker return [_buffer writeToURL:url 62*bf47c682SAndroid Build Coastguard Worker atomically:YES 63*bf47c682SAndroid Build Coastguard Worker encoding:NSUTF8StringEncoding 64*bf47c682SAndroid Build Coastguard Worker error:error]; 65*bf47c682SAndroid Build Coastguard Worker } 66*bf47c682SAndroid Build Coastguard Worker} 67*bf47c682SAndroid Build Coastguard Worker 68*bf47c682SAndroid Build Coastguard Worker- (NSString *)stringValue { 69*bf47c682SAndroid Build Coastguard Worker @synchronized (_buffer) { 70*bf47c682SAndroid Build Coastguard Worker return [NSString stringWithString:_buffer]; 71*bf47c682SAndroid Build Coastguard Worker } 72*bf47c682SAndroid Build Coastguard Worker} 73*bf47c682SAndroid Build Coastguard Worker@end 74