1 /** 2 * Logback: the reliable, generic, fast and flexible logging framework. 3 * Copyright (C) 1999-2015, QOS.ch. All rights reserved. 4 * 5 * This program and the accompanying materials are dual-licensed under 6 * either the terms of the Eclipse Public License v1.0 as published by 7 * the Eclipse Foundation 8 * 9 * or (per the licensee's choosing) 10 * 11 * under the terms of the GNU Lesser General Public License version 2.1 12 * as published by the Free Software Foundation. 13 */ 14 package ch.qos.logback.core; 15 16 import java.util.Map; 17 import java.util.concurrent.ExecutorService; 18 import java.util.concurrent.ScheduledExecutorService; 19 import java.util.concurrent.ScheduledFuture; 20 import java.util.concurrent.ThreadPoolExecutor; 21 import java.util.concurrent.locks.ReentrantLock; 22 23 import ch.qos.logback.core.spi.ConfigurationEvent; 24 import ch.qos.logback.core.spi.ConfigurationEventListener; 25 import ch.qos.logback.core.spi.LifeCycle; 26 import ch.qos.logback.core.spi.PropertyContainer; 27 import ch.qos.logback.core.spi.SequenceNumberGenerator; 28 import ch.qos.logback.core.status.StatusManager; 29 30 /** 31 * A context is the main anchorage point of all logback components. 32 * 33 * @author Ceki Gulcu 34 * 35 */ 36 public interface Context extends PropertyContainer { 37 38 /** 39 * Return the StatusManager instance in use. 40 * 41 * @return the {@link StatusManager} instance in use. 42 */ 43 StatusManager getStatusManager(); 44 45 /** 46 * A Context can act as a store for various objects used by LOGBack components. 47 * 48 * @return The object stored under 'key'. 49 */ 50 Object getObject(String key); 51 52 /** 53 * Store an object under 'key'. If no object can be found, null is returned. 54 * 55 * @param key 56 * @param value 57 */ 58 void putObject(String key, Object value); 59 60 /** 61 * Get all the properties for this context as a Map. Note that the returned cop 62 * might be a copy not the original. Thus, modifying the returned Map will have 63 * no effect (on the original.) 64 * 65 * @return 66 */ 67 // public Map<String, String> getPropertyMap(); 68 /** 69 * Get the property of this context. 70 */ 71 String getProperty(String key); 72 73 /** 74 * Set a property of this context. 75 */ 76 void putProperty(String key, String value); 77 78 /** 79 * Get a copy of the property map 80 * 81 * @return 82 * @since 0.9.20 83 */ 84 Map<String, String> getCopyOfPropertyMap(); 85 86 /** 87 * Contexts are named objects. 88 * 89 * @return the name for this context 90 */ 91 String getName(); 92 93 /** 94 * The name of the context can be set only once. 95 * 96 * @param name 97 */ 98 void setName(String name); 99 100 /** 101 * The time at which this context was created, expressed in millisecond elapsed 102 * since the epoch (1.1.1970). 103 * 104 * @return The time as measured when this class was created. 105 */ 106 long getBirthTime(); 107 108 /** 109 * Object used for synchronization purposes. INTENDED FOR INTERNAL USAGE. 110 */ 111 ReentrantLock getConfigurationLock(); 112 113 /** 114 * Returns the ScheduledExecutorService for this context. 115 * 116 * @return ScheduledExecutorService 117 * @since 1.1.7 118 */ 119 // Apparently ScheduledThreadPoolExecutor has limitation where a task cannot be 120 // submitted from within a running task. ThreadPoolExecutor does not have this limitation. 121 // This causes tests failures in 122 // SocketReceiverTest.testDispatchEventForEnabledLevel and 123 // ServerSocketReceiverFunctionalTest.testLogEventFromClient. 124 ScheduledExecutorService getScheduledExecutorService(); 125 126 /** 127 * Every context has an ExecutorService which be invoked to execute certain 128 * tasks in a separate thread. 129 * 130 * @return the executor for this context. 131 * @since 1.0.00 (undeprecated in 1.4.7) 132 * 133 */ 134 ExecutorService getExecutorService(); 135 136 /** 137 * Return an alternate {@link ExecutorService} used for one task per thread execution. 138 * @return ExecutorService 139 */ 140 default ExecutorService getAlternateExecutorService() { 141 return getExecutorService(); 142 } 143 144 /** 145 * Register a component that participates in the context's life cycle. 146 * <p> 147 * All components registered via this method will be stopped and removed from 148 * the context when the context is reset. 149 * 150 * @param component the subject component 151 */ 152 void register(LifeCycle component); 153 154 /** 155 * Add scheduledFuture parameter to the list of known futures. 156 * 157 * @param scheduledFuture 158 */ 159 void addScheduledFuture(ScheduledFuture<?> scheduledFuture); 160 161 SequenceNumberGenerator getSequenceNumberGenerator(); 162 163 void setSequenceNumberGenerator(SequenceNumberGenerator sequenceNumberGenerator); 164 165 /** 166 * Add a {@link ConfigurationEventListener} to this context. 167 * 168 * <p>Configuration events are supposed to be rare and listeners to such events rarer still.</p> 169 * 170 * <p>The propagation of {@link ConfigurationEvent configuration events} is intended for internal testing 171 * as well as some coordination between configurators.</p> 172 * 173 * @param listener 174 * @since 1.3.6/1.4.6 175 */ 176 void addConfigurationEventListener(ConfigurationEventListener listener); 177 178 /** 179 * Remove an existing ConfigurationEventListener 180 * @param listener 181 * @since 1.5.7 182 */ 183 default void removeConfigurationEventListener(ConfigurationEventListener listener) {}; 184 /** 185 * Fire {@link ConfigurationEvent} by invoking {@link #addConfigurationEventListener registered listeners}. 186 * 187 * <p>Note that it is the role of configurators to invoke this method as a context does 188 * not necessarily know when it is being configured.</p> 189 * 190 * @param configurationEvent 191 * @since 1.3.6/1.4.6 192 */ 193 void fireConfigurationEvent(ConfigurationEvent configurationEvent); 194 195 }