| <?php |
| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * @package log4php |
| */ |
| |
| /** |
| * The LoggerMDC class provides <i>mapped diagnostic contexts</i>. |
| * |
| * A <i>Mapped Diagnostic Context</i>, or |
| * MDC in short, is an instrument for distinguishing interleaved log |
| * output from different sources. Log output is typically interleaved |
| * when a server handles multiple clients near-simultaneously. |
| * |
| * This class is similar to the {@link LoggerNDC} class except that |
| * it is based on a map instead of a stack. |
| * |
| * Example: |
| * |
| * {@example ../../examples/php/mdc.php 19}<br> |
| * |
| * With the properties file: |
| * |
| * {@example ../../examples/resources/mdc.properties 18}<br> |
| * |
| * Will result in the following (notice the username "knut" in the output): |
| * |
| * <pre> |
| * 2009-09-13 18:48:28 DEBUG root knut: Testing MDC in src/examples/php/mdc.php at 23 |
| * </pre> |
| * |
| * @version $Revision$ |
| * @since 0.3 |
| * @package log4php |
| */ |
| class LoggerMDC { |
| |
| /** Holds the context map. */ |
| private static $map = array(); |
| |
| /** |
| * Stores a context value as identified with the key parameter into the |
| * context map. |
| * |
| * @param string $key the key |
| * @param string $value the value |
| */ |
| public static function put($key, $value) { |
| self::$map[$key] = $value; |
| } |
| |
| /** |
| * Returns the context value identified by the key parameter. |
| * |
| * Special key identifiers can be used to map values in the global $_SERVER |
| * and $_ENV vars. To access them, use 'server.' or 'env.' followed by the |
| * desired var name as the key. |
| * |
| * @param string $key The key. |
| * @return string The context or an empty string if no context found |
| * for given key. |
| */ |
| public static function get($key) { |
| if(!empty($key)) { |
| if(strpos($key, 'server.') === 0) { |
| $varName = substr($key, 7); |
| return isset($_SERVER[$varName]) ? $_SERVER[$varName] : ''; |
| } else if(strpos($key, 'env.') === 0) { |
| $varName = substr($key, 4); |
| $value = getenv($varName); |
| return ($value !== false) ? $value : ''; |
| } else { |
| return isset(self::$map[$key]) ? self::$map[$key] : ''; |
| } |
| } |
| return ''; |
| } |
| |
| /** |
| * Returns the contex map as an array. |
| * @return array The MDC context map. |
| */ |
| public static function getMap() { |
| return self::$map; |
| } |
| |
| /** |
| * Removes the the context identified by the key parameter. |
| * |
| * Only affects user mappings, not $_ENV or $_SERVER. |
| * |
| * @param string $key The key to be removed. |
| */ |
| public static function remove($key) { |
| unset(self::$map[$key]); |
| } |
| |
| /** |
| * Clears the mapped diagnostic context. |
| */ |
| public static function clear() { |
| self::$map = array(); |
| } |
| } |