OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / include / lib / log4php / LoggerMDC.php
1 <?php
2 /**
3  * log4php is a PHP port of the log4j java logging package.
4  * 
5  * <p>This framework is based on log4j (see {@link http://jakarta.apache.org/log4j log4j} for details).</p>
6  * <p>Design, strategies and part of the methods documentation are developed by log4j team 
7  * (Ceki Gülcü as log4j project founder and 
8  * {@link http://jakarta.apache.org/log4j/docs/contributors.html contributors}).</p>
9  *
10  * <p>PHP port, extensions and modifications by VxR. All rights reserved.<br>
11  * For more information, please see {@link http://www.vxr.it/log4php/}.</p>
12  *
13  * <p>This software is published under the terms of the LGPL License
14  * a copy of which has been included with this distribution in the LICENSE file.</p>
15  * 
16  * @package log4php
17  */
18
19 /**
20  * @ignore 
21  */
22 if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__)); 
23  
24 /**
25  */
26 require_once(LOG4PHP_DIR . '/LoggerLog.php');
27
28
29 define('LOGGER_MDC_HT_SIZE', 7);
30
31 /**
32  * This is the global repository of user mappings
33  */
34 $GLOBALS['log4php.LoggerMDC.ht'] = array();
35
36 /**
37  * The LoggerMDC class is similar to the {@link LoggerNDC} class except that it is
38  * based on a map instead of a stack. It provides <i>mapped diagnostic contexts</i>.
39  * 
40  * A <i>Mapped Diagnostic Context</i>, or
41  * MDC in short, is an instrument for distinguishing interleaved log
42  * output from different sources. Log output is typically interleaved
43  * when a server handles multiple clients near-simultaneously.
44  *
45  * <p><b><i>The MDC is managed on a per thread basis</i></b>.
46  * 
47  * @author VxR <vxr@vxr.it>
48  * @version $Revision: 2 $
49  * @since 0.3
50  * @package log4php
51  */
52 class LoggerMDC {
53   
54     /**
55      * Put a context value as identified with the key parameter into the current thread's
56      *  context map.
57      *
58      * <p>If the current thread does not have a context map it is
59      *  created as a side effect.</p>
60      *
61      * <p>Note that you cannot put more than {@link LOGGER_MDC_HT_SIZE} keys.</p>
62      *
63      * @param string $key the key
64      * @param string $value the value
65      * @static
66      */
67     function put($key, $value)
68     {
69         if ( sizeof($GLOBALS['log4php.LoggerMDC.ht']) < LOGGER_MDC_HT_SIZE ) 
70             $GLOBALS['log4php.LoggerMDC.ht'][$key] = $value;
71     }
72   
73     /**
74      * Get the context identified by the key parameter.
75      *
76      * <p>You can use special key identifiers to map values in 
77      * PHP $_SERVER and $_ENV vars. Just put a 'server.' or 'env.'
78      * followed by the var name you want to refer.</p>
79      *
80      * <p>This method has no side effects.</p>
81      *
82      * @param string $key
83      * @return string
84      * @static
85      */
86     function get($key)
87     {
88         LoggerLog::debug("LoggerMDC::get() key='$key'");
89     
90         if (!empty($key)) {
91             if (strpos($key, 'server.') === 0) {
92                 $varName = substr($key, 7);
93                 
94                 LoggerLog::debug("LoggerMDC::get() a _SERVER[$varName] is requested.");
95                 
96                 return $_SERVER[$varName];
97             } elseif (strpos($key, 'env.') === 0) {
98
99                 $varName = substr($key, 4);
100                 
101                 LoggerLog::debug("LoggerMDC::get() a _ENV[$varName] is requested.");
102                 
103                 return $_ENV[$varName];
104             } elseif (isset($GLOBALS['log4php.LoggerMDC.ht'][$key])) {
105             
106                 LoggerLog::debug("LoggerMDC::get() a user key is requested.");
107             
108                 return $GLOBALS['log4php.LoggerMDC.ht'][$key];
109             }
110         }
111         return '';
112     }
113
114     /**
115      * Remove the the context identified by the key parameter. 
116      *
117      * It only affects user mappings.
118      *
119      * @param string $key
120      * @return string
121      * @static
122      */
123     function remove($key)
124     {
125         unset($GLOBALS['log4php.LoggerMDC.ht'][$key]);
126     }
127
128 }
129 ?>