[slf4j-dev] svn commit: r941 - slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers

ceki at slf4j.org ceki at slf4j.org
Tue Jan 15 17:02:43 CET 2008


Author: ceki
Date: Tue Jan 15 17:02:42 2008
New Revision: 941

Added:
   slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/BasicMDCAdapter.java

Log:

As requested by Maarten Bosteels in bug report 63 [1], adding BasicMDCAdapter 
in order to support logging systems without native MDC support.

[]1 http://bugzilla.slf4j.org/show_bug.cgi?id=63

Added: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/BasicMDCAdapter.java
==============================================================================
--- (empty file)
+++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/BasicMDCAdapter.java	Tue Jan 15 17:02:42 2008
@@ -0,0 +1,120 @@
+/* 
+ * Copyright (c) 2004-2008 QOS.ch
+ * 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 org.slf4j.spi.MDCAdapter;
+
+import java.util.HashMap;
+import java.util.Set;
+
+  /**
+   * Basic MDC implementation, which can be used with logging systems that
+   * lack out-of-the-box MDC support.
+   * 
+   * This code is largely based on logback's <a href="http://svn.qos.ch/viewvc/logback/trunk/logback-classic/src/main/java/org/slf4j/impl/LogbackMDCAdapter.java">
+   * LogbackMDCAdapter</a>.
+   * 
+   * @author Ceki Gulcu
+   * @author Maarten Bosteels
+   */
+  public class BasicMDCAdapter implements MDCAdapter {
+
+    private InheritableThreadLocal inheritableThreadLocal = new InheritableThreadLocal();
+
+    /**
+     * Put a context value (the <code>val</code> parameter) as identified with
+     * the <code>key</code> parameter into the current thread's context map.
+     * Note that contrary to log4j, the <code>val</code> parameter can be null.
+     * 
+     * <p>
+     * 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
+     */
+    public void put(String key, String val) {
+      if (key == null) {
+        throw new IllegalArgumentException("key cannot be null");
+      }
+      HashMap map = (HashMap) inheritableThreadLocal.get();
+      if (map == null) {
+        map = new HashMap();
+        inheritableThreadLocal.set(map);
+      }
+      map.put(key, val);
+    }
+
+    /**
+     * Get the context identified by the <code>key</code> parameter.
+     */
+    public String get(String key) {
+      HashMap hashMap = (HashMap) inheritableThreadLocal.get();
+      if ((hashMap != null) && (key != null)) {
+        return (String) hashMap.get(key);
+      } else {
+        return null;
+      }
+    }
+
+
+    /**
+     * Remove the the context identified by the <code>key</code> parameter.
+     */
+    public void remove(String key) {
+      HashMap map = (HashMap) inheritableThreadLocal.get();
+      if (map != null) {
+        map.remove(key);
+      }
+    }
+
+    /**
+     * Clear all entries in the MDC.
+     */
+    public void clear() {
+      HashMap hashMap = (HashMap) inheritableThreadLocal.get();
+      if (hashMap != null) {
+        hashMap.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
+     */
+    public Set getKeys() {
+      HashMap hashMap = (HashMap) inheritableThreadLocal.get();
+      if (hashMap != null) {
+        return hashMap.keySet();
+      } else {
+        return null;
+      }
+    }
+
+  
+  
+}



More information about the slf4j-dev mailing list