LOG4J2-1010 DynamicThresholdFilter should get context data from the configured ContextDataInjector, not hard-coded from ThreadContext
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/498bdb57 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/498bdb57 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/498bdb57 Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure Commit: 498bdb579a42c52542caf650bb4929dbf80ac8cc Parents: 3ebff53 0c9c9f3 Author: rpopma <rpo...@apache.org> Authored: Sat Aug 27 15:51:09 2016 +0900 Committer: rpopma <rpo...@apache.org> Committed: Sat Aug 27 15:51:09 2016 +0900 ---------------------------------------------------------------------- .../config/Log4j1ConfigurationFactory.java | 9 +- .../log4j/config/Log4j1ConfigurationParser.java | 210 ++-- .../apache/log4j/BasicConfigurationFactory.java | 13 +- .../config/Log4j1ConfigurationFactoryTest.java | 29 +- ...g4j-console-EnhancedPatternLayout.properties | 1 - .../log4j-console-HtmlLayout.properties | 1 - .../log4j-console-PatternLayout.properties | 1 - .../log4j-console-SimpleLayout.properties | 1 - .../log4j-console-TTCCLayout.properties | 1 - .../log4j-console-XmlLayout.properties | 1 - .../log4j-file-SimpleLayout.properties | 17 + .../logging/log4j/core/AbstractLifeCycle.java | 8 + .../apache/logging/log4j/core/LifeCycle.java | 13 + .../logging/log4j/core/LoggerContext.java | 113 +- .../log4j/core/appender/AbstractManager.java | 17 +- .../core/appender/ConfigurationFactoryData.java | 50 + .../log4j/core/appender/ConsoleAppender.java | 4 - .../log4j/core/appender/FileAppender.java | 12 +- .../log4j/core/appender/FileManager.java | 30 +- .../core/appender/OutputStreamManager.java | 12 +- .../core/appender/RandomAccessFileAppender.java | 2 +- .../core/appender/RandomAccessFileManager.java | 27 +- .../core/appender/RollingFileAppender.java | 16 +- .../RollingRandomAccessFileAppender.java | 2 +- .../log4j/core/appender/WriterManager.java | 2 +- .../appender/db/AbstractDatabaseManager.java | 2 +- .../log4j/core/appender/mom/JmsManager.java | 2 +- .../core/appender/mom/jeromq/JeroMqManager.java | 2 +- .../core/appender/mom/kafka/KafkaAppender.java | 7 +- .../core/appender/mom/kafka/KafkaManager.java | 22 +- .../appender/rolling/RollingFileManager.java | 44 +- .../rolling/RollingRandomAccessFileManager.java | 32 +- .../core/config/AbstractConfiguration.java | 15 +- .../log4j/core/config/Configuration.java | 8 + .../log4j/core/config/ConfigurationFactory.java | 1113 +++++++++--------- .../core/config/ConfigurationScheduler.java | 10 +- .../core/config/ConfiguratonFileWatcher.java | 10 +- .../logging/log4j/core/config/Configurator.java | 36 +- .../log4j/core/config/DefaultConfiguration.java | 2 +- .../log4j/core/config/NullConfiguration.java | 2 +- .../builder/api/ConfigurationBuilder.java | 8 + .../config/builder/impl/BuiltConfiguration.java | 5 +- .../impl/DefaultConfigurationBuilder.java | 29 +- .../composite/CompositeConfiguration.java | 4 +- .../core/config/json/JsonConfiguration.java | 14 +- .../config/json/JsonConfigurationFactory.java | 5 +- .../core/config/plugins/util/ResolverUtil.java | 11 +- .../properties/PropertiesConfiguration.java | 8 +- .../PropertiesConfigurationBuilder.java | 16 +- .../PropertiesConfigurationFactory.java | 10 +- .../log4j/core/config/xml/XmlConfiguration.java | 7 +- .../config/xml/XmlConfigurationFactory.java | 6 +- .../core/config/yaml/YamlConfiguration.java | 7 +- .../config/yaml/YamlConfigurationFactory.java | 5 +- .../core/filter/DynamicThresholdFilter.java | 84 +- .../log4j/core/impl/Log4jContextFactory.java | 6 +- .../log4j/core/jmx/LoggerContextAdmin.java | 4 +- .../apache/logging/log4j/core/jmx/Server.java | 6 +- .../logging/log4j/core/net/JndiManager.java | 2 +- .../logging/log4j/core/net/SmtpManager.java | 2 +- .../core/net/server/AbstractSocketServer.java | 7 +- .../log4j/core/net/server/JmsServer.java | 7 + .../util/DefaultShutdownCallbackRegistry.java | 7 + .../log4j/core/util/Log4jThreadFactory.java | 11 + .../log4j/core/BasicConfigurationFactory.java | 6 +- .../appender/RandomAccessFileManagerTest.java | 18 +- .../rolling/OnStartupTriggeringPolicyTest.java | 2 +- .../RandomRollingAppenderOnStartupTest.java | 2 +- .../RollingAppenderCronOnceADayTest.java | 125 ++ .../rolling/RollingAppenderCronTest.java | 2 +- .../RollingAppenderCustomDeleteActionTest.java | 2 +- ...lingAppenderDeleteAccumulatedCount1Test.java | 2 +- ...lingAppenderDeleteAccumulatedCount2Test.java | 2 +- ...ollingAppenderDeleteAccumulatedSizeTest.java | 2 +- .../RollingAppenderDeleteMaxDepthTest.java | 2 +- .../RollingAppenderDeleteNestedTest.java | 2 +- .../RollingAppenderDeleteScriptFri13thTest.java | 2 +- .../RollingAppenderDeleteScriptTest.java | 2 +- ...ollingAppenderNoUnconditionalDeleteTest.java | 2 +- .../rolling/RollingAppenderOnStartupTest.java | 2 +- .../rolling/RollingAppenderSizeTest.java | 2 +- .../rolling/RollingAppenderTimeAndSizeTest.java | 4 +- .../rolling/RollingAppenderTimeTest.java | 2 +- ...RandomAccessFileManagerHeaderFooterTest.java | 3 +- .../RollingRandomAccessFileManagerTest.java | 24 +- .../log4j/core/config/ConfigurationTest.java | 6 + .../builder/CustomConfigurationFactory.java | 11 +- .../plugins/util/PluginManagerPackagesTest.java | 2 +- .../util/ResolverUtilCustomProtocolTest.java | 208 ++++ .../config/plugins/util/ResolverUtilTest.java | 146 ++- .../core/filter/DynamicThresholdFilterTest.java | 17 + .../core/layout/CsvParameterLayoutTest.java | 59 +- .../logging/log4j/junit/LoggerContextRule.java | 25 +- .../junit/URLStreamHandlerFactoryRule.java | 96 ++ .../resources/log4j-rolling-cron-once-a-day.xml | 47 + .../src/test/resources/log4j-rolling-cron.xml | 2 +- .../src/test/resources/log4j-rolling-cron2.xml | 2 +- .../flume/appender/AbstractFlumeManager.java | 2 +- .../configuration/CustomConfiguration.java | 13 +- .../CustomConfigurationFactory.java | 12 +- pom.xml | 2 +- src/changes/changes.xml | 62 +- src/site/xdoc/manual/customconfig.xml | 10 +- src/site/xdoc/manual/extending.xml | 8 +- 104 files changed, 2099 insertions(+), 1011 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/498bdb57/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java ---------------------------------------------------------------------- diff --cc log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java index 3c6cdaa,24cfada..eaa999c --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java @@@ -40,9 -35,7 +40,9 @@@ import org.apache.logging.log4j.core.ut import org.apache.logging.log4j.message.Message; /** - * Compare against a log level that is associated with a context value. By default the context is the - * Compares against a log level that is associated with an MDC value. ++ * Compares against a log level that is associated with a context value. By default the context is the + * {@link ThreadContext}, but users may {@linkplain ContextDataInjectorFactory configure} a custom + * {@link ContextDataInjector} which obtains context data from some other source. */ @Plugin(name = "DynamicThresholdFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true) public final class DynamicThresholdFilter extends AbstractFilter { @@@ -70,9 -63,9 +70,10 @@@ final Level level = defaultThreshold == null ? Level.ERROR : defaultThreshold; return new DynamicThresholdFilter(key, map, level, onMatch, onMismatch); } - ++ private Level defaultThreshold = Level.ERROR; private final String key; + private final ContextDataInjector injector = ContextDataInjectorFactory.createInjector(); private Map<String, Level> levelMap = new HashMap<>(); private DynamicThresholdFilter(final String key, final Map<String, Level> pairs, final Level defaultLevel, @@@ -153,18 -146,88 +154,97 @@@ @Override public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object... params) { - return filter(level, ThreadContext.getContext()); + return filter(level, currentContextData()); + } + + private ContextData currentContextData() { + return injector.injectContextData(null, reusableInstance()); + } + + private MutableContextData reusableInstance() { + // TODO if (Constants.ENABLE_THREADLOCALS) return thread-local instance + return ContextDataFactory.createContextData(); // creates temporary object } + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7, final Object p8) { + return filter(level, ThreadContext.getContext()); + + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7, final Object p8, final Object p9) { + return filter(level, ThreadContext.getContext()); + + } - ++ public String getKey() { return this.key; }