Skip to content

Commit 54158d5

Browse files
committed
Allow custom instances of SLLoggerController
* Mirror class 'shared' methods with instance methods. Instance methods contain the code, class methods call instance ones on the sharedController
1 parent e82a4cd commit 54158d5

File tree

2 files changed

+74
-7
lines changed

2 files changed

+74
-7
lines changed

SuperLogger/SLLoggerController.h

+31-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ NS_ASSUME_NONNULL_BEGIN
5555
*/
5656
@property (assign, nonatomic) SLLogLevel globalLogLevel;
5757

58+
/**
59+
* Shared Controller methods are class methods that automatically target the sharedController instance. Since 99% of the time you will want to use the sharedController, these are considered convenience methods.
60+
*/
61+
#pragma mark - Shared Controller methods
5862

5963
+ (SLLoggerController *)sharedController;
6064

@@ -80,7 +84,33 @@ NS_ASSUME_NONNULL_BEGIN
8084
*/
8185
+ (void)searchStoredLogsWithFilters:(NSArray<SLLogFilterBlock> *)searchFilters completion:(SLSearchCompletionBlock)completionBlock;
8286

83-
+ (void)logStringWithLevel:(SLLogLevel)level fileName:(NSString *)fileName functionName:(NSString *)functionName line:(NSInteger)line message:(NSString *)message, ... NS_FORMAT_FUNCTION(5, 6);
87+
+ (void)logStringWithLevel:(SLLogLevel)level
88+
fileName:(NSString *)fileName
89+
functionName:(NSString *)functionName
90+
line:(NSInteger)line
91+
message:(NSString *)message, ... NS_FORMAT_FUNCTION(5, 6);
92+
93+
94+
#pragma mark - Instance Methods
95+
96+
- (void)addLoggers:(NSArray<id<SLLogger>> *)loggers;
97+
- (void)addModules:(NSArray<SLFileModule *> *)modules;
98+
- (void)addFilters:(NSArray<SLLogFilterBlock> *)filters;
99+
100+
- (void)removeLoggers:(NSArray<id<SLLogger>> *)loggers;
101+
- (void)removeModules:(NSArray<SLFileModule *> *)modules;
102+
- (void)removeFilters:(NSArray<SLLogFilterBlock> *)filters;
103+
104+
- (SLLogLevel)logLevelForFile:(NSString *)file;
105+
106+
- (void)logStringWithLevel:(SLLogLevel)level
107+
fileName:(NSString *)fileName
108+
functionName:(NSString *)functionName
109+
line:(NSInteger)line
110+
message:(NSString *)message, ... NS_FORMAT_FUNCTION(5, 6);
111+
112+
113+
#pragma mark - Shared Queue
84114

85115
+ (dispatch_queue_t)globalLogQueue;
86116

SuperLogger/SLLoggerController.m

+43-6
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,32 @@ - (instancetype)init {
6060

6161
#pragma mark - Set adding / removing
6262

63+
#pragma Shared Instance
6364
+ (void)addLoggers:(NSArray<id<SLLogger>> *)loggers {
65+
[[self.class sharedController] addLoggers:loggers];
66+
}
67+
68+
+ (void)addModules:(NSArray<SLFileModule *> *)modules {
69+
[[self.class sharedController] addModules:modules];
70+
}
71+
72+
+ (void)addFilters:(NSArray<SLLogFilterBlock> *)filters {
73+
[[self.class sharedController] addFilters:filters];
74+
}
75+
76+
+ (void)removeLoggers:(NSArray<id<SLLogger>> *)loggers {
77+
[[self.class sharedController] removeLoggers:loggers];
78+
}
79+
80+
+ (void)removeModules:(NSArray<SLFileModule *> *)modules {
81+
[[self.class sharedController] removeModules:modules];
82+
}
83+
84+
+ (void)removeFilters:(NSArray<SLLogFilterBlock> *)filters {
85+
[[self.class sharedController] removeFilters:filters];
86+
}
87+
88+
- (void)addLoggers:(NSArray<id<SLLogger>> *)loggers {
6489
dispatch_async([self.class globalLogQueue], ^{ @autoreleasepool {
6590
for (id<SLLogger> logger in loggers) {
6691
#ifndef DEBUG
@@ -76,19 +101,20 @@ + (void)addLoggers:(NSArray<id<SLLogger>> *)loggers {
76101
}});
77102
}
78103

79-
+ (void)addModules:(NSArray<SLFileModule *> *)modules {
104+
#pragma Instance Methods
105+
- (void)addModules:(NSArray<SLFileModule *> *)modules {
80106
dispatch_async([self.class globalLogQueue], ^{ @autoreleasepool {
81107
[[self.class sharedController].mutableLogModules addObjectsFromArray:modules];
82108
}});
83109
}
84110

85-
+ (void)addFilters:(NSArray<SLLogFilterBlock> *)filters {
111+
- (void)addFilters:(NSArray<SLLogFilterBlock> *)filters {
86112
dispatch_async([self.class globalLogQueue], ^{ @autoreleasepool {
87113
[[self.class sharedController].mutableLogFilters addObjectsFromArray:filters];
88114
}});
89115
}
90116

91-
+ (void)removeLoggers:(NSArray<id<SLLogger>> *)loggers {
117+
- (void)removeLoggers:(nonnull NSArray<id<SLLogger>> *)loggers {
92118
dispatch_async([self.class globalLogQueue], ^{
93119
for (id<SLLogger> logger in loggers) {
94120
[logger teardownLogger];
@@ -97,15 +123,15 @@ + (void)removeLoggers:(NSArray<id<SLLogger>> *)loggers {
97123
});
98124
}
99125

100-
+ (void)removeModules:(NSArray<SLFileModule *> *)modules {
126+
- (void)removeModules:(NSArray<SLFileModule *> *)modules {
101127
dispatch_async([self.class globalLogQueue], ^{
102128
for (SLFileModule *module in modules) {
103129
[[self.class sharedController].mutableLogModules removeObject:module];
104130
}
105131
});
106132
}
107133

108-
+ (void)removeFilters:(NSArray<SLLogFilterBlock> *)filters {
134+
- (void)removeFilters:(NSArray<SLLogFilterBlock> *)filters {
109135
dispatch_async([self.class globalLogQueue], ^{
110136
for (SLLogFilterBlock filter in filters) {
111137
[[self.class sharedController].mutableLogFilters removeObject:filter];
@@ -117,6 +143,10 @@ + (void)removeFilters:(NSArray<SLLogFilterBlock> *)filters {
117143
#pragma mark - Log Level
118144

119145
+ (SLLogLevel)logLevelForFile:(NSString *)file {
146+
return [[self.class sharedController] logLevelForFile:file];
147+
}
148+
149+
- (SLLogLevel)logLevelForFile:(NSString *)file {
120150
for (SLFileModule *module in [self.class sharedController].logModules) {
121151
if ([module containsFile:file]) {
122152
return module.logLevel;
@@ -151,6 +181,13 @@ - (void)setDefaultFormatBlock:(SLLogFormatBlock)defaultFormatBlock {
151181
#pragma mark - Logging
152182

153183
+ (void)logStringWithLevel:(SLLogLevel)level fileName:(NSString *)fileName functionName:(NSString *)functionName line:(NSInteger)line message:(NSString *)message, ... {
184+
va_list args;
185+
va_start(args, message);
186+
187+
[[self.class sharedController] logStringWithLevel:level fileName:fileName functionName:functionName line:line message:message, args];
188+
}
189+
190+
- (void)logStringWithLevel:(SLLogLevel)level fileName:(NSString *)fileName functionName:(NSString *)functionName line:(NSInteger)line message:(NSString *)message, ... {
154191
NSDate *timestamp = [NSDate date];
155192
NSArray *callstack = [NSThread callStackSymbols];
156193
#pragma clang diagnostic push
@@ -163,7 +200,7 @@ + (void)logStringWithLevel:(SLLogLevel)level fileName:(NSString *)fileName funct
163200
NSString *format = [[NSString alloc] initWithFormat:message arguments:args];
164201

165202
SLLog *log = [[SLLog alloc] initWithMessage:format timestamp:timestamp level:level fileName:fileName functionName:functionName line:line queueLabel:currentQueueLabel callstack:callstack];
166-
[[self sharedController] sl_logMessage:log];
203+
[self sl_logMessage:log];
167204
}
168205

169206
- (void)sl_logMessage:(SLLog *)log {

0 commit comments

Comments
 (0)