File |
Line |
org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java |
208 |
org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java |
203 |
return map == null ? EMPTY_CONTEXT_DATA : map;
}
@Override
public Map<String, String> getImmutableMapOrNull() {
final StringMap map = localMap.get();
return map == null ? null : Collections.unmodifiableMap(map.toMap());
}
@Override
public boolean isEmpty() {
final StringMap map = localMap.get();
return map == null || map.size() == 0;
}
@Override
public String toString() {
final StringMap map = localMap.get();
return map == null ? "{}" : map.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
final StringMap map = this.localMap.get();
result = prime * result + ((map == null) ? 0 : map.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof ThreadContextMap)) {
return false;
}
final ThreadContextMap other = (ThreadContextMap) obj;
final Map<String, String> map = this.getImmutableMapOrNull();
final Map<String, String> otherMap = other.getImmutableMapOrNull();
if (map == null) {
if (otherMap != null) {
return false;
}
} else if (!map.equals(otherMap)) {
return false;
}
return true;
}
} |
File |
Line |
org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java |
62 |
org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java |
57 |
public CopyOnWriteSortedArrayThreadContextMap() {
this.localMap = createThreadLocalMap();
}
// LOG4J2-479: by default, use a plain ThreadLocal, only use InheritableThreadLocal if configured.
// (This method is package protected for JUnit tests.)
private ThreadLocal<StringMap> createThreadLocalMap() {
final PropertiesUtil managerProps = PropertiesUtil.getProperties();
final boolean inheritable = managerProps.getBooleanProperty(INHERITABLE_MAP);
if (inheritable) {
return new InheritableThreadLocal<StringMap>() {
@Override
protected StringMap childValue(final StringMap parentValue) {
return parentValue != null ? createStringMap(parentValue) : null;
}
};
}
// if not inheritable, return plain ThreadLocal with null as initial value
return new ThreadLocal<>();
}
/**
* Returns an implementation of the {@code StringMap} used to back this thread context map.
* <p>
* Subclasses may override.
* </p>
* @return an implementation of the {@code StringMap} used to back this thread context map
*/
protected StringMap createStringMap() {
return new SortedArrayStringMap(PropertiesUtil.getProperties().getIntegerProperty(
PROPERTY_NAME_INITIAL_CAPACITY, DEFAULT_INITIAL_CAPACITY));
}
/**
* Returns an implementation of the {@code StringMap} used to back this thread context map, pre-populated
* with the contents of the specified context data.
* <p>
* Subclasses may override.
* </p>
* @param original the key-value pairs to initialize the returned context data with
* @return an implementation of the {@code StringMap} used to back this thread context map
*/
protected StringMap createStringMap(final ReadOnlyStringMap original) {
return new SortedArrayStringMap(original);
} |
File |
Line |
org/apache/logging/log4j/message/ExtendedThreadInformation.java |
114 |
org/apache/logging/log4j/message/ExtendedThreadInformation.java |
137 |
case WAITING: {
final StackTraceElement element = info.getStackTrace()[0];
final String className = element.getClassName();
final String method = element.getMethodName();
if (className.equals("java.lang.Object") && method.equals("wait")) {
sb.append(" (on object monitor");
if (info.getLockOwnerName() != null) {
sb.append(" owned by \"");
sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
}
sb.append(')');
} else if (className.equals("java.lang.Thread") && method.equals("join")) { |
File |
Line |
org/apache/logging/log4j/MarkerManager.java |
251 |
org/apache/logging/log4j/MarkerManager.java |
284 |
}
final Marker[] localParents = parents;
if (localParents != null) {
// With only one or two parents the for loop is slower.
final int localParentsLength = localParents.length;
if (localParentsLength == 1) {
return checkParent(localParents[0], marker);
}
if (localParentsLength == 2) {
return checkParent(localParents[0], marker) || checkParent(localParents[1], marker);
}
// noinspection ForLoopReplaceableByForEach
for (int i = 0; i < localParentsLength; i++) {
final Marker localParent = localParents[i];
if (checkParent(localParent, marker)) {
return true;
}
}
}
return false;
}
@Override |
File |
Line |
org/apache/logging/log4j/MarkerManager.java |
286 |
org/apache/logging/log4j/MarkerManager.java |
313 |
if (localParents != null) {
final int localParentsLength = localParents.length;
if (localParentsLength == 1) {
return checkParent(localParents[0], marker);
}
if (localParentsLength == 2) {
return checkParent(localParents[0], marker) || checkParent(localParents[1], marker);
}
// noinspection ForLoopReplaceableByForEach
for (int i = 0; i < localParentsLength; i++) {
final Marker localParent = localParents[i];
if (checkParent(localParent, marker)) {
return true;
}
}
}
return false;
}
@PerformanceSensitive({"allocation", "unrolled"}) |
File |
Line |
org/apache/logging/log4j/MarkerManager.java |
253 |
org/apache/logging/log4j/MarkerManager.java |
313 |
if (localParents != null) {
// With only one or two parents the for loop is slower.
final int localParentsLength = localParents.length;
if (localParentsLength == 1) {
return checkParent(localParents[0], marker);
}
if (localParentsLength == 2) {
return checkParent(localParents[0], marker) || checkParent(localParents[1], marker);
}
// noinspection ForLoopReplaceableByForEach
for (int i = 0; i < localParentsLength; i++) {
final Marker localParent = localParents[i];
if (checkParent(localParent, marker)) {
return true;
}
}
}
return false;
}
@Override |
File |
Line |
org/apache/logging/log4j/message/ExtendedThreadInformation.java |
124 |
org/apache/logging/log4j/message/ExtendedThreadInformation.java |
149 |
sb.append(')');
} else if (className.equals("java.lang.Thread") && method.equals("join")) {
sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(')');
} else {
sb.append(" (parking for lock");
if (info.getLockOwnerName() != null) {
sb.append(" owned by \"");
sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
}
sb.append(')');
}
break;
} |