1 /** 2 * Copyright (c) 2004-2011 QOS.ch 3 * All rights reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be 14 * included in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * 24 */ 25 package org.slf4j; 26 27 import org.slf4j.helpers.BasicMarkerFactory; 28 import org.slf4j.helpers.Util; 29 import org.slf4j.spi.SLF4JServiceProvider; 30 31 /** 32 * MarkerFactory is a utility class producing {@link Marker} instances as 33 * appropriate for the logging system currently in use. 34 * 35 * <p> 36 * This class is essentially implemented as a wrapper around an 37 * {@link IMarkerFactory} instance bound at compile time. 38 * 39 * <p> 40 * Please note that all methods in this class are static. 41 * 42 * @author Ceki Gülcü 43 */ 44 public class MarkerFactory { 45 static IMarkerFactory MARKER_FACTORY; 46 47 private MarkerFactory() { 48 } 49 50 // this is where the binding happens 51 static { 52 SLF4JServiceProvider provider = LoggerFactory.getProvider(); 53 if (provider != null) { 54 MARKER_FACTORY = provider.getMarkerFactory(); 55 } else { 56 Util.report("Failed to find provider"); 57 Util.report("Defaulting to BasicMarkerFactory."); 58 MARKER_FACTORY = new BasicMarkerFactory(); 59 } 60 } 61 62 /** 63 * Return a Marker instance as specified by the name parameter using the 64 * previously bound {@link IMarkerFactory}instance. 65 * 66 * @param name 67 * The name of the {@link Marker} object to return. 68 * @return marker 69 */ 70 public static Marker getMarker(String name) { 71 return MARKER_FACTORY.getMarker(name); 72 } 73 74 /** 75 * Create a marker which is detached (even at birth) from the MarkerFactory. 76 * 77 * @param name the name of the marker 78 * @return a dangling marker 79 * @since 1.5.1 80 */ 81 public static Marker getDetachedMarker(String name) { 82 return MARKER_FACTORY.getDetachedMarker(name); 83 } 84 85 /** 86 * Return the {@link IMarkerFactory}instance in use. 87 * 88 * <p>The IMarkerFactory instance is usually bound with this class at 89 * compile time. 90 * 91 * @return the IMarkerFactory instance in use 92 */ 93 public static IMarkerFactory getIMarkerFactory() { 94 return MARKER_FACTORY; 95 } 96 }