Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2004-2011 All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package org.slf4j.helpers;
 import java.util.*;
 import java.util.Map;

Basic MDC implementation, which can be used with logging systems that lack out-of-the-box MDC support. This code was initially inspired by logback's LogbackMDCAdapter. However, LogbackMDCAdapter has evolved and is now considerably more sophisticated.

Ceki Gulcu
Maarten Bosteels
 public class BasicMDCAdapter implements MDCAdapter {
     = new InheritableThreadLocal<Map<StringString>>();
   static boolean isJDK14() {
     try {
       String javaVersion = System.getProperty("java.version");
       return javaVersion.startsWith("1.4");
     } catch(SecurityException se) {
       // punt and assume JDK 1.5 or later
       return false;
   static boolean IS_JDK14 = isJDK14();

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.

java.lang.IllegalArgumentException in case the "key" parameter is null
   public void put(String keyString val) {
     if (key == null) {
       throw new IllegalArgumentException("key cannot be null");
     Map<StringStringmap = (Map<StringString>) .get();
     if (map == null) {
       map = Collections.<StringString>synchronizedMap(new HashMap<StringString>());

Get the context identified by the key parameter.
   public String get(String key) {
     Map<StringStringMap = (Map<StringString>) .get();
     if ((Map != null) && (key != null)) {
       return (StringMap.get(key);
     } else {
       return null;

Remove the the context identified by the key parameter.
  public void remove(String key) {
    if (map != null) {

Clear all entries in the MDC.
  public void clear() {
    if (map != null) {
      // the InheritableThreadLocal.remove method was introduced in JDK 1.5
      // Thus, invoking clear() on previous JDK 1.4 will fail
      if(isJDK14()) {
      }  else {

Returns the keys in the MDC as a java.util.Set of java.lang.Strings The returned value can be null.

the keys in the MDC
  public Set<StringgetKeys() {
    if (map != null) {
      return map.keySet();
    } else {
      return null;
Return a copy of the current thread's context map. Returned value may be null.
    Map<StringStringoldMap = (Map<StringString>) .get();
    if (oldMap != null) {
       Map<StringStringnewMap = Collections.<StringString>synchronizedMap(new HashMap<StringString>());
       synchronized (oldMap) {
       return  newMap;
    } else {
      return null;
  public void setContextMap(Map<StringStringcontextMap) {
    Map<StringStringmap = Collections.<StringString>synchronizedMap(new HashMap<StringString>(contextMap));
New to GrepCode? Check out our FAQ X