Closed Gloduck closed 2 years ago
每次进入一个方法创建一个新的map入栈,可以用修饰符来保证,而不是通过注释来保证。 如下:
public class LogRecordHolder { private static final InheritableThreadLocal<Stack<Map<String, Object>>> variableMapStack = new InheritableThreadLocal<>(); /** * 放入方法变量 * * @param key 键 * @param value 值 */ public static void putVariable(String key, Object value) { getVariableMap(false).put(key, value); } /** * 获取方法变量 * * @param key 键 * @return {@link Object} */ public static Object getVariable(String key) { return getVariableMap(false).get(key); } /** * 获取方法变量Map * * @return {@link Map}<{@link String}, {@link Object}> */ public static Map<String, Object> getVariableMap() { return getVariableMap(false); } /** * 清理Log变量Map */ public static void clear() { Stack<Map<String, Object>> mapStack = variableMapStack.get(); if(mapStack == null || mapStack.size() == 0){ variableMapStack.remove(); } else { mapStack.pop(); } } /** * 获取变量map * * @param createNew 是否创建一个新的map * @return {@link Map}<{@link String}, {@link Object}> */ static Map<String, Object> getVariableMap(boolean createNew){ Stack<Map<String, Object>> mapStack = variableMapStack.get(); if (mapStack == null) { mapStack = new Stack<>(); variableMapStack.set(mapStack); } Map<String, Object> variableMap; if(createNew || mapStack.size() == 0){ variableMap = new HashMap<>(4); mapStack.push(variableMap); } else { variableMap = mapStack.peek(); } return variableMap; } }
可以可以的👍🏻
下个版本修复的
每次进入一个方法创建一个新的map入栈,可以用修饰符来保证,而不是通过注释来保证。 如下: