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