1// Copyright 2019-present 650 Industries. All rights reserved. 2 3#import <ExpoModulesCore/EXLogManager.h> 4#import <ExpoModulesCore/EXLogHandler.h> 5#import <ExpoModulesCore/EXModuleRegistryProvider.h> 6 7@interface EXLogManager () 8 9@property (nonatomic, strong) NSSet<id<EXLogHandler>> *logHandlersCache; 10 11@end 12 13@implementation EXLogManager 14 15EX_REGISTER_SINGLETON_MODULE(LogManager); 16 17- (NSSet<id<EXLogHandler>> *)logHandlers 18{ 19 if (!_logHandlersCache) { 20 _logHandlersCache = [[EXModuleRegistryProvider singletonModules] filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { 21 return [evaluatedObject conformsToProtocol:@protocol(EXLogHandler)]; 22 }]]; 23 } 24 25 return _logHandlersCache; 26} 27 28- (void)info:(NSString *)message 29{ 30 [[self logHandlers] makeObjectsPerformSelector:@selector(info:) withObject:message]; 31} 32 33- (void)warn:(NSString *)message 34{ 35 [[self logHandlers] makeObjectsPerformSelector:@selector(warn:) withObject:message]; 36} 37 38- (void)error:(NSString *)message 39{ 40 [[self logHandlers] makeObjectsPerformSelector:@selector(error:) withObject:message]; 41} 42 43- (void)fatal:(NSString *)message 44{ 45 [[self logHandlers] makeObjectsPerformSelector:@selector(fatal:) withObject:message]; 46} 47 48@end 49 50void EXLogInfo(NSString *format, ...) { 51 va_list args; 52 va_start(args, format); 53 NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; 54 va_end(args); 55 [(EXLogManager *)[EXModuleRegistryProvider getSingletonModuleForClass:[EXLogManager class]] info:message]; 56} 57 58void EXLogWarn(NSString *format, ...) { 59 va_list args; 60 va_start(args, format); 61 NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; 62 va_end(args); 63 [(EXLogManager *)[EXModuleRegistryProvider getSingletonModuleForClass:[EXLogManager class]] warn:message]; 64} 65 66void EXLogError(NSString *format, ...) { 67 va_list args; 68 va_start(args, format); 69 NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; 70 va_end(args); 71 [(EXLogManager *)[EXModuleRegistryProvider getSingletonModuleForClass:[EXLogManager class]] error:message]; 72} 73 74void EXFatal(NSError *error) { 75 [(EXLogManager *)[EXModuleRegistryProvider getSingletonModuleForClass:[EXLogManager class]] fatal:error]; 76} 77