in log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java [48:135]
public static NameAbbreviator getAbbreviator(final String pattern) {
if (pattern.length() > 0) {
// if pattern is just spaces and numbers then
// use MaxElementAbbreviator
final String trimmed = pattern.trim();
if (trimmed.isEmpty()) {
return DEFAULT;
}
final NameAbbreviator dwa = DynamicWordAbbreviator.create(trimmed);
if (dwa != null) {
return dwa;
}
boolean isNegativeNumber;
final String number;
// check if number is a negative number
if (trimmed.length() > 1 && trimmed.charAt(0) == '-') {
isNegativeNumber = true;
number = trimmed.substring(1);
} else {
isNegativeNumber = false;
number = trimmed;
}
int i = 0;
while (i < number.length() && number.charAt(i) >= '0' && number.charAt(i) <= '9') {
i++;
}
//
// if all blanks and digits
//
if (i == number.length()) {
return new MaxElementAbbreviator(
Integers.parseInt(number),
isNegativeNumber ? MaxElementAbbreviator.Strategy.DROP : MaxElementAbbreviator.Strategy.RETAIN);
}
final List<PatternAbbreviatorFragment> fragments = new ArrayList<>(5);
char ellipsis;
int charCount;
int pos = 0;
while (pos < trimmed.length() && pos >= 0) {
int ellipsisPos = pos;
if (trimmed.charAt(pos) == '*') {
charCount = Integer.MAX_VALUE;
ellipsisPos++;
} else if (trimmed.charAt(pos) >= '0' && trimmed.charAt(pos) <= '9') {
charCount = trimmed.charAt(pos) - '0';
ellipsisPos++;
} else {
charCount = 0;
}
ellipsis = '\0';
if (ellipsisPos < trimmed.length()) {
ellipsis = trimmed.charAt(ellipsisPos);
if (ellipsis == '.') {
ellipsis = '\0';
}
}
fragments.add(new PatternAbbreviatorFragment(charCount, ellipsis));
pos = trimmed.indexOf('.', pos);
if (pos == -1) {
break;
}
pos++;
}
return new PatternAbbreviator(fragments);
}
//
// no matching abbreviation, return defaultAbbreviator
//
return DEFAULT;
}