|
|
@@ -134,98 +134,69 @@ static DDQualityOfServiceName _qos_name(NSUInteger qos) {
|
|
|
- (NSString *)queueThreadLabelForLogMessage:(DDLogMessage *)logMessage {
|
|
|
// As per the DDLogFormatter contract, this method is always invoked on the same thread/dispatch_queue
|
|
|
|
|
|
- NSUInteger minQueueLength = self.minQueueLength;
|
|
|
- NSUInteger maxQueueLength = self.maxQueueLength;
|
|
|
-
|
|
|
- // Get the name of the queue, thread, or machID (whichever we are to use).
|
|
|
-
|
|
|
- NSString *queueThreadLabel = nil;
|
|
|
-
|
|
|
- BOOL useQueueLabel = YES;
|
|
|
- BOOL useThreadName = NO;
|
|
|
-
|
|
|
+ BOOL useQueueLabel = NO;
|
|
|
if (logMessage->_queueLabel) {
|
|
|
+ useQueueLabel = YES;
|
|
|
+
|
|
|
// If you manually create a thread, it's dispatch_queue will have one of the thread names below.
|
|
|
// Since all such threads have the same name, we'd prefer to use the threadName or the machThreadID.
|
|
|
-
|
|
|
- NSArray *names = @[
|
|
|
+ const NSArray *names = @[
|
|
|
@"com.apple.root.low-priority",
|
|
|
@"com.apple.root.default-priority",
|
|
|
@"com.apple.root.high-priority",
|
|
|
@"com.apple.root.low-overcommit-priority",
|
|
|
@"com.apple.root.default-overcommit-priority",
|
|
|
@"com.apple.root.high-overcommit-priority",
|
|
|
- @"com.apple.root.default-qos.overcommit"
|
|
|
+ @"com.apple.root.default-qos.overcommit",
|
|
|
];
|
|
|
-
|
|
|
- for (NSString * name in names) {
|
|
|
+ for (NSString *name in names) {
|
|
|
if ([logMessage->_queueLabel isEqualToString:name]) {
|
|
|
useQueueLabel = NO;
|
|
|
- useThreadName = [logMessage->_threadName length] > 0;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- useQueueLabel = NO;
|
|
|
- useThreadName = [logMessage->_threadName length] > 0;
|
|
|
}
|
|
|
|
|
|
- if (useQueueLabel || useThreadName) {
|
|
|
- NSString *fullLabel;
|
|
|
- NSString *abrvLabel;
|
|
|
-
|
|
|
- if (useQueueLabel) {
|
|
|
- fullLabel = logMessage->_queueLabel;
|
|
|
- } else {
|
|
|
- fullLabel = logMessage->_threadName;
|
|
|
- }
|
|
|
+ // Get the name of the queue, thread, or machID (whichever we are to use).
|
|
|
+ NSString *queueThreadLabel;
|
|
|
+ if (useQueueLabel || [logMessage->_threadName length] > 0) {
|
|
|
+ NSString *fullLabel = useQueueLabel ? logMessage->_queueLabel : logMessage->_threadName;
|
|
|
|
|
|
+ NSString *abrvLabel;
|
|
|
pthread_mutex_lock(&_mutex);
|
|
|
{
|
|
|
abrvLabel = _replacements[fullLabel];
|
|
|
}
|
|
|
pthread_mutex_unlock(&_mutex);
|
|
|
|
|
|
- if (abrvLabel) {
|
|
|
- queueThreadLabel = abrvLabel;
|
|
|
- } else {
|
|
|
- queueThreadLabel = fullLabel;
|
|
|
- }
|
|
|
+ queueThreadLabel = abrvLabel ?: fullLabel;
|
|
|
} else {
|
|
|
queueThreadLabel = logMessage->_threadID;
|
|
|
}
|
|
|
|
|
|
// Now use the thread label in the output
|
|
|
-
|
|
|
- NSUInteger labelLength = [queueThreadLabel length];
|
|
|
-
|
|
|
// labelLength > maxQueueLength : truncate
|
|
|
// labelLength < minQueueLength : padding
|
|
|
// : exact
|
|
|
-
|
|
|
- if ((maxQueueLength > 0) && (labelLength > maxQueueLength)) {
|
|
|
+ NSUInteger minQueueLength = self.minQueueLength;
|
|
|
+ NSUInteger maxQueueLength = self.maxQueueLength;
|
|
|
+ NSUInteger labelLength = [queueThreadLabel length];
|
|
|
+ if (maxQueueLength > 0 && labelLength > maxQueueLength) {
|
|
|
// Truncate
|
|
|
-
|
|
|
return [queueThreadLabel substringToIndex:maxQueueLength];
|
|
|
} else if (labelLength < minQueueLength) {
|
|
|
// Padding
|
|
|
-
|
|
|
- NSUInteger numSpaces = minQueueLength - labelLength;
|
|
|
-
|
|
|
- char spaces[numSpaces + 1];
|
|
|
- memset(spaces, ' ', numSpaces);
|
|
|
- spaces[numSpaces] = '\0';
|
|
|
-
|
|
|
- return [queueThreadLabel stringByAppendingString:@(spaces)];
|
|
|
+ return [queueThreadLabel stringByPaddingToLength:minQueueLength
|
|
|
+ withString:@" "
|
|
|
+ startingAtIndex:0];
|
|
|
} else {
|
|
|
// Exact
|
|
|
-
|
|
|
return queueThreadLabel;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
|
|
|
- NSString *timestamp = [self stringFromDate:(logMessage->_timestamp)];
|
|
|
+ NSString *timestamp = [self stringFromDate:logMessage->_timestamp];
|
|
|
NSString *queueThreadLabel = [self queueThreadLabelForLogMessage:logMessage];
|
|
|
|
|
|
return [NSString stringWithFormat:@"%@ [%@ (QOS:%@)] %@", timestamp, queueThreadLabel, _qos_name(logMessage->_qos), logMessage->_message];
|