root/trunk/src/java/org/jcoderz/commons/LogThreadContext.java

Revision 1579, 4.3 kB (checked in by amandel, 2 years ago)

Address findings introduced with last commit.

  • Property svn:mime-type set to text/plain
Line 
1/*
2 * $Id: LogMessageInfoImpl.java 1247 2008-11-04 20:00:09Z amandel $
3 *
4 * Copyright 2006, The jCoderZ.org Project. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *    * Redistributions of source code must retain the above copyright
11 *      notice, this list of conditions and the following disclaimer.
12 *    * Redistributions in binary form must reproduce the above
13 *      copyright notice, this list of conditions and the following
14 *      disclaimer in the documentation and/or other materials
15 *      provided with the distribution.
16 *    * Neither the name of the jCoderZ.org Project nor the names of
17 *      its contributors may be used to endorse or promote products
18 *      derived from this software without specific prior written
19 *      permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33package org.jcoderz.commons;
34
35import java.util.HashMap;
36import java.util.Map;
37
38import org.jcoderz.commons.util.ObjectUtil;
39
40/**
41 * This class holds logging context information that is bound to the
42 * current thread.
43 *
44 * <p>The values of the map should be strictly Strings. This is to avoid
45 * misuse of the map as thread local cache and to avoid storing large
46 * object graphs in the context.</p>
47 * 
48 * @author Andreas Mandel
49 */
50public final class LogThreadContext
51{
52    private static final ThreadLocal TREAD_CONTEXT = new ThreadLocal()
53    {
54        protected Object initialValue ()
55        {
56            return new HashMap();
57        }
58    };
59   
60    private LogThreadContext ()
61    {
62        // No public instances
63    }
64   
65    /**
66     * Add a value identified by the given key to the thread context.
67     * <p>The adder of the value is responsible that the value is removed
68     * if the context is left. There can only be one value set for a
69     * given key.</p>
70     * @param key the identifier of the value to be set.
71     * @param value the value to be stored in the context.
72     * @return the String representation of the previous value stored
73     *  for this key, or null if no such value was stored.
74     */
75    public static String put (String key, String value)
76    {
77        return ObjectUtil.toString(get().put(key, value));
78    }
79   
80    /**
81     * Returns the value of the selected context parameter, or null
82     * if the selected parameter is not set.
83     * @param key the identifier of the value to be retrieved.
84     * @return the value of the selected context parameter, or null
85     *  if the selected parameter is not set.
86     */
87    public static String get (String key)
88    {
89        return ObjectUtil.toString(get().get(key));
90    }
91   
92    /**
93     * Removes the value that is currently stored for the given key.
94     * @param key the identifier of the value to be removed.
95     * @return the value of the selected context parameter, or null
96     *  if the selected parameter is not set.
97     */
98    public static String remove (String key)
99    {
100        return ObjectUtil.toString(get().remove(key));
101    }
102
103    /**
104     * Returns the underlying map that is used to store context
105     * parameters of the current thread. Changes on the returned Map
106     * will also change the stored logging context.
107     * @return the underlying map that is used to store context
108     * parameters of the current thread.
109     */
110    public static Map/*<String,String>*/ get ()
111    {
112        return (Map) TREAD_CONTEXT.get();
113    }
114}
Note: See TracBrowser for help on using the browser.