Repository: logging-log4j2 Updated Branches: refs/heads/master 769612070 -> e0058d672
LOG4J2-1648 SPI interface for putting Object values in the ThreadContextMap (no end-user visible API yet) Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e0058d67 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e0058d67 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e0058d67 Branch: refs/heads/master Commit: e0058d672121a10a3deb88709fda708e51eddcf4 Parents: 7696120 Author: rpopma <rpo...@apache.org> Authored: Sun Nov 6 10:25:23 2016 +0900 Committer: rpopma <rpo...@apache.org> Committed: Sun Nov 6 10:25:23 2016 +0900 ---------------------------------------------------------------------- .../CopyOnWriteSortedArrayThreadContextMap.java | 14 ++++++- .../GarbageFreeSortedArrayThreadContextMap.java | 14 ++++++- .../log4j/spi/ObjectThreadContextMap.java | 44 ++++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e0058d67/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java index d346d0e..3b91dbb 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java @@ -34,7 +34,7 @@ import org.apache.logging.log4j.util.PropertiesUtil; * * @since 2.7 */ -class CopyOnWriteSortedArrayThreadContextMap implements ReadOnlyThreadContextMap, ThreadContextMap2, CopyOnWrite { +class CopyOnWriteSortedArrayThreadContextMap implements ReadOnlyThreadContextMap, ObjectThreadContextMap, CopyOnWrite { /** * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain @@ -107,6 +107,11 @@ class CopyOnWriteSortedArrayThreadContextMap implements ReadOnlyThreadContextMap @Override public void put(final String key, final String value) { + putValue(key, value); + } + + @Override + public void putValue(final String key, final Object value) { StringMap map = localMap.get(); map = map == null ? createStringMap() : createStringMap(map); map.putValue(key, value); @@ -130,8 +135,13 @@ class CopyOnWriteSortedArrayThreadContextMap implements ReadOnlyThreadContextMap @Override public String get(final String key) { + return (String) getValue(key); + } + + @Override + public Object getValue(final String key) { final StringMap map = localMap.get(); - return map == null ? null : (String) map.getValue(key); + return map == null ? null : map.getValue(key); } @Override http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e0058d67/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java index d0ee369..7113d9f 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java @@ -34,7 +34,7 @@ import org.apache.logging.log4j.util.SortedArrayStringMap; * </p> * @since 2.7 */ -class GarbageFreeSortedArrayThreadContextMap implements ReadOnlyThreadContextMap, ThreadContextMap2 { +class GarbageFreeSortedArrayThreadContextMap implements ReadOnlyThreadContextMap, ObjectThreadContextMap { /** * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain @@ -115,6 +115,11 @@ class GarbageFreeSortedArrayThreadContextMap implements ReadOnlyThreadContextMap } @Override + public void putValue(final String key, final Object value) { + getThreadLocalMap().putValue(key, value); + } + + @Override public void putAll(final Map<String, String> values) { if (values == null || values.isEmpty()) { return; @@ -127,8 +132,13 @@ class GarbageFreeSortedArrayThreadContextMap implements ReadOnlyThreadContextMap @Override public String get(final String key) { + return (String) getValue(key); + } + + @Override + public Object getValue(final String key) { final StringMap map = localMap.get(); - return map == null ? null : (String) map.getValue(key); + return map == null ? null : map.getValue(key); } @Override http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e0058d67/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java new file mode 100644 index 0000000..a3e3715 --- /dev/null +++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.spi; + +/** + * Extension service provider interface to allow putting Object values in the + * {@link org.apache.logging.log4j.ThreadContext}. + * + * @see ThreadContextMap2 + * @since 2.8 + */ +public interface ObjectThreadContextMap extends ThreadContextMap2 { + + /** + * Returns the Object value for the specified key, or {@code null} if the specified key does not exist in this + * collection. + * + * @param key the key whose value to return + * @return the value for the specified key or {@code null} + */ + <V> V getValue(String key); + + /** + * Puts the specified key-value pair into the collection. + * + * @param key the key to add or remove. Keys may be {@code null}. + * @param value the value to add. Values may be {@code null}. + */ + <V> void putValue(String key, V value); +}