All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.firefly.utils.log.ThreadLocalMappedDiagnosticContext Maven / Gradle / Ivy

There is a newer version: 5.0.2
Show newest version
package com.firefly.utils.log;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author Pengtao Qiu
 */
public class ThreadLocalMappedDiagnosticContext implements MappedDiagnosticContext {

    private InheritableThreadLocal> inheritableThreadLocal = new InheritableThreadLocal>() {
        @Override
        protected Map childValue(Map parentValue) {
            if (parentValue == null) {
                return null;
            }
            return new HashMap<>(parentValue);
        }
    };

    /**
     * Put a context value (the val parameter) as identified with
     * the key parameter into the current thread's context map.
     * Note that contrary to log4j, the val parameter can be null.
     * 

*

* If the current thread does not have a context map it is created as a side * effect of this call. * * @throws IllegalArgumentException in case the "key" parameter is null */ @Override public void put(String key, String val) { if (key == null) { throw new IllegalArgumentException("key cannot be null"); } Map map = inheritableThreadLocal.get(); if (map == null) { map = new HashMap<>(); inheritableThreadLocal.set(map); } map.put(key, val); } /** * Get the context identified by the key parameter. */ @Override public String get(String key) { Map map = inheritableThreadLocal.get(); if ((map != null) && (key != null)) { return map.get(key); } else { return null; } } /** * Remove the the context identified by the key parameter. */ @Override public void remove(String key) { Map map = inheritableThreadLocal.get(); if (map != null) { map.remove(key); } } /** * Clear all entries in the MDC. */ @Override public void clear() { Map map = inheritableThreadLocal.get(); if (map != null) { map.clear(); inheritableThreadLocal.remove(); } } /** * Returns the keys in the MDC as a {@link Set} of {@link String}s The * returned value can be null. * * @return the keys in the MDC */ @Override public Set getKeys() { Map map = inheritableThreadLocal.get(); if (map != null) { return map.keySet(); } else { return null; } } /** * Return a copy of the current thread's context map. * Returned value may be null. */ @Override public Map getCopyOfContextMap() { Map oldMap = inheritableThreadLocal.get(); if (oldMap != null) { return new HashMap<>(oldMap); } else { return null; } } @Override public void setContextMap(Map contextMap) { inheritableThreadLocal.set(new HashMap<>(contextMap)); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy