Sources/Producer/Log.m (195 lines of code) (raw):

// // Log.m // AliyunLogProducer // // Created by lichao on 2020/9/27. // Copyright © 2020 lichao. All rights reserved. // #import <Foundation/Foundation.h> #import "Log.h" #import "TimeUtils.h" #import "SLSProducer.h" @interface Log () @property (nonatomic, assign) unsigned int logTime; @property (nonatomic, strong) NSMutableDictionary *content; - (BOOL) checkValue: (NSString *)value; @end @implementation Log - (id) init { if (self = [super init]) { _logTime = (unsigned int) [TimeUtils getTimeInMilliis]; _content = [NSMutableDictionary dictionary]; } return self; } + (instancetype) log { return [[Log alloc] init]; } - (BOOL) checkValue:(NSString *)value { return value && [value isKindOfClass:[NSString class]]; } - (void)PutContent:(NSString *) key value:(NSString *)value { [self putContent:key value:value]; } - (void) putContent: (NSString *) key value: (NSString *) value { if ([self checkValue:key] && [self checkValue:value]) { [_content setObject:value forKey:key]; } } - (BOOL) putContents: (NSDictionary *) dict { if (!dict) { return NO; } NSDictionary *tmp = [NSDictionary dictionaryWithDictionary:dict]; NSMutableDictionary *newDict = [NSMutableDictionary dictionary]; BOOL error = NO; id value = nil; for (id key in tmp.allKeys) { if (![key isKindOfClass:[NSString class]]) { error = YES; break; } value = [tmp objectForKey:key]; if ([value isKindOfClass:[NSString class]]) { [newDict setObject:value forKey:key]; } else if ([value isKindOfClass:[NSNumber class]]) { [newDict setObject:[value stringValue] forKey:key]; } else if ([value isKindOfClass:[NSNull class]]) { [newDict setObject:@"null" forKey:key]; } else if (([value isKindOfClass:[NSDictionary class]] || [value isKindOfClass:[NSArray class]]) && [NSJSONSerialization isValidJSONObject:value]) { [newDict setObject:[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:value options:kNilOptions error:nil ] encoding:NSUTF8StringEncoding] forKey:key ]; } else { error = YES; break; } } if (!error) { [_content addEntriesFromDictionary:newDict]; } else { SLSLog(@"Your NSDictionary is not support convert to JSON, all values will not be added, please check your data."); } return error; } - (void) putContent: (NSString *) key intValue: (int) value { if ([self checkValue:key]) { [_content setObject:[NSString stringWithFormat:@"%d", value] forKey:key]; } } - (void) putContent: (NSString *) key longValue: (long) value { if ([self checkValue:key]) { [_content setObject:[NSString stringWithFormat:@"%ld", value] forKey:key]; } } - (void) putContent: (NSString *) key longlongValue: (long long) value { if ([self checkValue:key]) { [_content setObject:[NSString stringWithFormat:@"%lld", value] forKey:key]; } } - (void) putContent: (NSString *) key floatValue: (float) value { if ([self checkValue:key]) { [_content setObject:[NSString stringWithFormat:@"%f", value] forKey:key]; } } - (void) putContent: (NSString *) key doubleValue: (double) value { if ([self checkValue:key]) { [_content setObject:[NSString stringWithFormat:@"%f", value] forKey:key]; } } - (void) putContent: (NSString *) key boolValue: (BOOL) value { if ([self checkValue:key]) { [NSNumber numberWithBool:YES]; [_content setObject:(YES == value ? @"YES" : @"NO") forKey:key]; } } - (BOOL) putContent: (NSData *) value { if (!value) { return NO; } if ([value isKindOfClass:[NSNull class]]) { [self putContent:@"data" value:@"null"]; return YES; } NSError *error = nil; id data = [NSJSONSerialization JSONObjectWithData:value options:kNilOptions error:&error ]; if (nil != error) { NSString *string = [[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding]; [self putContent:@"data" value:string]; return YES; } if ([data isKindOfClass:[NSDictionary class]]) { [self putContents:data]; } else if ([data isKindOfClass:[NSArray class]]) { [self putContent:@"data" arrayValue:data]; } else { SLSLog(@"Class %@ not support convert to JSON.", [data class]); return NO; } return YES; } - (BOOL) putContent: (NSString *) key dataValue: (NSData *)value { if ([self checkValue:key] && value && ![value isKindOfClass:[NSNull class]]) { [_content setObject:[[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding ] forKey:key]; return YES; } return NO; } - (BOOL) putContent: (NSString *) key arrayValue: (NSArray *) value { if ([self checkValue:key] && value && [NSJSONSerialization isValidJSONObject:value]) { NSError *error = nil; NSData *data = [NSJSONSerialization dataWithJSONObject:value options:kNilOptions error:&error ]; if (nil != error) { SLSLog(@"error while deserializing NSArray to JSON. error: %@", error.description); return NO; } [_content setObject:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding ] forKey:key]; return YES; } return NO; } - (BOOL) putContent: (NSString *) key dictValue: (NSDictionary *) value { if ([self checkValue:key] && value && [NSJSONSerialization isValidJSONObject:value]) { NSError *error = nil; NSData *data = [NSJSONSerialization dataWithJSONObject:value options:kNilOptions error:&error ]; if (nil != error) { SLSLog(@"error while deserializing NSDictionary to JSON. error: %@", error.description); return NO; } [_content setObject:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding ] forKey:key]; return YES; } return NO; } - (NSMutableDictionary *)getContent { return _content; } - (void)SetTime:(unsigned int) logTime { _logTime = logTime; } - (unsigned int)getTime { return _logTime; } @end