Skip to content

Commit 6d84367

Browse files
authored
Deprecate StatusConsoleListener filters (#2226)
The configuration attribute `verbose` (i.e., `<Configuration verbose="..."`) and `StatusConsoleListener` filters are deprecated. This is part of an ongoing effort to simplify the `StatusLogger`. `verbose` attribute is deprecated, because it was only effective over `verboseClasses` and that was hardcoded to a list only containing `ResourceUtil`. `ResourceUtil` is slightly updated and its `logger.info()` calls are replaced with `logger.debug()`.
1 parent 5d47e93 commit 6d84367

File tree

13 files changed

+38
-115
lines changed

13 files changed

+38
-115
lines changed

log4j-api-test/src/test/java/org/apache/logging/log4j/status/StatusConsoleListenerTest.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -114,29 +114,6 @@ void level_and_stream_should_be_honored() throws Exception {
114114
.doesNotContain(discardedMessage.getFormattedMessage());
115115
}
116116

117-
@Test
118-
void filters_should_be_honored() throws Exception {
119-
120-
// Create the listener.
121-
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
122-
final String encoding = "UTF-8";
123-
final PrintStream printStream = new PrintStream(outputStream, false, encoding);
124-
final StatusConsoleListener listener = new StatusConsoleListener(Level.TRACE, printStream);
125-
126-
// Set the filter.
127-
final StackTraceElement caller = new StackTraceElement("callerClass", "callerMethod", "callerFile", 1);
128-
listener.setFilters(caller.getClassName());
129-
130-
// Log the message to be filtered.
131-
final Message message = MESSAGE_FACTORY.newMessage("foo");
132-
listener.log(new StatusData(caller, Level.TRACE, message, null, null)); // as set by `StatusLogger` itself
133-
134-
// Verify the filtering.
135-
printStream.flush();
136-
final String output = outputStream.toString(encoding);
137-
Assertions.assertThat(output).isEmpty();
138-
}
139-
140117
@Test
141118
void non_system_streams_should_be_closed() throws Exception {
142119
final PrintStream stream = Mockito.mock(PrintStream.class);

log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ public class StatusConsoleListener implements StatusListener {
3131

3232
private Level level;
3333

34-
private String[] filters;
35-
3634
private final PrintStream stream;
3735

3836
private final Logger logger;
@@ -92,37 +90,21 @@ public Level getStatusLevel() {
9290
*/
9391
@Override
9492
public void log(final StatusData data) {
95-
final boolean filtered = filtered(data);
96-
if (!filtered) {
97-
logger
98-
// Logging using _only_ the following 4 fields set by `StatusLogger#logMessage()`:
99-
.atLevel(data.getLevel())
100-
.withThrowable(data.getThrowable())
101-
.withLocation(data.getStackTraceElement())
102-
.log(data.getMessage());
103-
}
93+
logger
94+
// Logging using _only_ the following 4 fields set by `StatusLogger#logMessage()`:
95+
.atLevel(data.getLevel())
96+
.withThrowable(data.getThrowable())
97+
.withLocation(data.getStackTraceElement())
98+
.log(data.getMessage());
10499
}
105100

106101
/**
107102
* Adds package name filters to exclude.
108103
* @param filters An array of package names to exclude.
104+
* @deprecated This method is ineffective and only kept for binary backward compatibility.
109105
*/
110-
public void setFilters(final String... filters) {
111-
this.filters = filters;
112-
}
113-
114-
private boolean filtered(final StatusData data) {
115-
if (filters == null) {
116-
return false;
117-
}
118-
final String caller = data.getStackTraceElement().getClassName();
119-
for (final String filter : filters) {
120-
if (caller.startsWith(filter)) {
121-
return true;
122-
}
123-
}
124-
return false;
125-
}
106+
@Deprecated
107+
public void setFilters(final String... filters) {}
126108

127109
@Override
128110
public void close() throws IOException {

log4j-core-test/src/main/resources/Log4j-config.xsd

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,6 @@
157157
<documentation>Enables the use of the strict XML format. Not supported in JSON configurations.</documentation>
158158
</annotation>
159159
</attribute>
160-
<attribute name="verbose" type="tns:BooleanType" default="false">
161-
<annotation>
162-
<documentation>Enables diagnostic information while loading plugins.</documentation>
163-
</annotation>
164-
</attribute>
165160
</complexType>
166161
</element>
167162

log4j-core-test/src/test/resources/log4j-customLevelsWithFilters.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
~ See the License for the specific language governing permissions and
1616
~ limitations under the License.
1717
-->
18-
<Configuration status="WARN" verbose="true">
18+
<Configuration status="WARN">
1919
<CustomLevels>
2020
<CustomLevel name="INFOM1" intLevel="399" />
2121
<CustomLevel name="INFOP1" intLevel="401" />

log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.apache.logging.log4j.core.config.builder.api.Component;
2929
import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
3030
import org.apache.logging.log4j.core.config.plugins.util.PluginType;
31-
import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil;
3231
import org.apache.logging.log4j.core.config.status.StatusConfiguration;
3332
import org.apache.logging.log4j.core.util.Patterns;
3433

@@ -39,7 +38,6 @@
3938
* @since 2.4
4039
*/
4140
public class BuiltConfiguration extends AbstractConfiguration {
42-
private static final String[] VERBOSE_CLASSES = new String[] {ResolverUtil.class.getName()};
4341
private final StatusConfiguration statusConfig;
4442
protected Component rootComponent;
4543
private Component loggersComponent;
@@ -53,8 +51,7 @@ public class BuiltConfiguration extends AbstractConfiguration {
5351
public BuiltConfiguration(
5452
final LoggerContext loggerContext, final ConfigurationSource source, final Component rootComponent) {
5553
super(loggerContext, source);
56-
statusConfig =
57-
new StatusConfiguration().withVerboseClasses(VERBOSE_CLASSES).withStatus(getDefaultStatus());
54+
statusConfig = new StatusConfiguration().withStatus(getDefaultStatus());
5855
for (final Component component : rootComponent.getComponents()) {
5956
switch (component.getPluginType()) {
6057
case "Scripts": {

log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
8181
private ConfigurationSource source;
8282
private int monitorInterval;
8383
private Level level;
84-
private String verbosity;
8584
private String destination;
8685
private String packages;
8786
private String shutdownFlag;
@@ -200,9 +199,6 @@ public T build(final boolean initialize) {
200199
if (level != null) {
201200
configuration.getStatusConfiguration().withStatus(level);
202201
}
203-
if (verbosity != null) {
204-
configuration.getStatusConfiguration().withVerbosity(verbosity);
205-
}
206202
if (destination != null) {
207203
configuration.getStatusConfiguration().withDestination(destination);
208204
}
@@ -273,9 +269,6 @@ private void writeXmlConfiguration(final XMLStreamWriter xmlWriter) throws XMLSt
273269
if (level != null) {
274270
xmlWriter.writeAttribute("status", level.name());
275271
}
276-
if (verbosity != null) {
277-
xmlWriter.writeAttribute("verbose", verbosity);
278-
}
279272
if (destination != null) {
280273
xmlWriter.writeAttribute("dest", destination);
281274
}
@@ -596,9 +589,12 @@ public ConfigurationBuilder<T> setStatusLevel(final Level level) {
596589
return this;
597590
}
598591

592+
/**
593+
* @deprecated This method is ineffective and only kept for binary backward compatibility.
594+
*/
599595
@Override
596+
@Deprecated
600597
public ConfigurationBuilder<T> setVerbosity(final String verbosity) {
601-
this.verbosity = verbosity;
602598
return this;
603599
}
604600

log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.apache.logging.log4j.core.config.ConfigurationSource;
3232
import org.apache.logging.log4j.core.config.Node;
3333
import org.apache.logging.log4j.core.config.Reconfigurable;
34-
import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil;
3534
import org.apache.logging.log4j.core.config.status.StatusConfiguration;
3635
import org.apache.logging.log4j.core.util.Loader;
3736
import org.apache.logging.log4j.core.util.Patterns;
@@ -50,8 +49,6 @@ public class CompositeConfiguration extends AbstractConfiguration implements Rec
5049
*/
5150
public static final String MERGE_STRATEGY_PROPERTY = "log4j.mergeStrategy";
5251

53-
private static final String[] VERBOSE_CLASSES = new String[] {ResolverUtil.class.getName()};
54-
5552
private final List<? extends AbstractConfiguration> configurations;
5653

5754
private MergeStrategy mergeStrategy;
@@ -79,8 +76,7 @@ public CompositeConfiguration(final List<? extends AbstractConfiguration> config
7976
for (final AbstractConfiguration config : configurations) {
8077
mergeStrategy.mergeRootProperties(rootNode, config);
8178
}
82-
final StatusConfiguration statusConfig =
83-
new StatusConfiguration().withVerboseClasses(VERBOSE_CLASSES).withStatus(getDefaultStatus());
79+
final StatusConfiguration statusConfig = new StatusConfiguration().withStatus(getDefaultStatus());
8480
for (final Map.Entry<String, String> entry : rootNode.getAttributes().entrySet()) {
8581
final String key = entry.getKey();
8682
final String value = getConfigurationStrSubstitutor().replace(entry.getValue());
@@ -92,8 +88,6 @@ public CompositeConfiguration(final List<? extends AbstractConfiguration> config
9288
isShutdownHookEnabled = !"disable".equalsIgnoreCase(value);
9389
} else if ("shutdownTimeout".equalsIgnoreCase(key)) {
9490
shutdownTimeoutMillis = Long.parseLong(value);
95-
} else if ("verbose".equalsIgnoreCase(key)) {
96-
statusConfig.withVerbosity(value);
9791
} else if ("packages".equalsIgnoreCase(key)) {
9892
pluginPackages.addAll(Arrays.asList(value.split(Patterns.COMMA_SEPARATOR)));
9993
} else if ("name".equalsIgnoreCase(key)) {

log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.apache.logging.log4j.core.config.Node;
3737
import org.apache.logging.log4j.core.config.Reconfigurable;
3838
import org.apache.logging.log4j.core.config.plugins.util.PluginType;
39-
import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil;
4039
import org.apache.logging.log4j.core.config.status.StatusConfiguration;
4140
import org.apache.logging.log4j.core.util.Integers;
4241
import org.apache.logging.log4j.core.util.Patterns;
@@ -46,7 +45,6 @@
4645
*/
4746
public class JsonConfiguration extends AbstractConfiguration implements Reconfigurable {
4847

49-
private static final String[] VERBOSE_CLASSES = new String[] {ResolverUtil.class.getName()};
5048
private final List<Status> status = new ArrayList<>();
5149
private JsonNode root;
5250

@@ -66,9 +64,7 @@ public JsonConfiguration(final LoggerContext loggerContext, final ConfigurationS
6664
}
6765
}
6866
processAttributes(rootNode, root);
69-
final StatusConfiguration statusConfig = new StatusConfiguration()
70-
.withVerboseClasses(VERBOSE_CLASSES)
71-
.withStatus(getDefaultStatus());
67+
final StatusConfiguration statusConfig = new StatusConfiguration().withStatus(getDefaultStatus());
7268
int monitorIntervalSeconds = 0;
7369
for (final Map.Entry<String, String> entry :
7470
rootNode.getAttributes().entrySet()) {
@@ -83,8 +79,6 @@ public JsonConfiguration(final LoggerContext loggerContext, final ConfigurationS
8379
isShutdownHookEnabled = !"disable".equalsIgnoreCase(value);
8480
} else if ("shutdownTimeout".equalsIgnoreCase(key)) {
8581
shutdownTimeoutMillis = Long.parseLong(value);
86-
} else if ("verbose".equalsIgnoreCase(entry.getKey())) {
87-
statusConfig.withVerbosity(value);
8882
} else if ("packages".equalsIgnoreCase(key)) {
8983
pluginPackages.addAll(Arrays.asList(value.split(Patterns.COMMA_SEPARATOR)));
9084
} else if ("name".equalsIgnoreCase(key)) {

log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public void findInPackage(final Test test, String packageName) {
193193
final URL url = urls.nextElement();
194194
final String urlPath = extractPath(url);
195195

196-
LOGGER.info("Scanning for classes in '{}' matching criteria {}", urlPath, test);
196+
LOGGER.debug("Scanning for classes in '{}' matching criteria {}", urlPath, test);
197197
// Check for a jar in a war in JBoss
198198
if (VFSZIP.equals(url.getProtocol())) {
199199
final String path = urlPath.substring(0, urlPath.length() - packageName.length() - 2);
@@ -457,9 +457,7 @@ protected void addIfMatching(final Test test, final String fqn) {
457457
final ClassLoader loader = getClassLoader();
458458
if (test.doesMatchClass()) {
459459
final String externalName = fqn.substring(0, fqn.indexOf('.')).replace('/', '.');
460-
if (LOGGER.isDebugEnabled()) {
461-
LOGGER.debug("Checking to see if class {} matches criteria {}", externalName, test);
462-
}
460+
LOGGER.debug("Checking to see if class {} matches criteria {}", externalName, test);
463461

464462
final Class<?> type = loader.loadClass(externalName);
465463
if (test.matches(type)) {

log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public class StatusConfiguration {
4040
private static final PrintStream DEFAULT_STREAM = System.out;
4141

4242
private static final Level DEFAULT_STATUS = Level.ERROR;
43-
private static final Verbosity DEFAULT_VERBOSITY = Verbosity.QUIET;
4443

4544
private final Collection<String> errorMessages = new LinkedBlockingQueue<>();
4645
private final StatusLogger logger = StatusLogger.getLogger();
@@ -49,12 +48,12 @@ public class StatusConfiguration {
4948

5049
private PrintStream destination = DEFAULT_STREAM;
5150
private Level status = DEFAULT_STATUS;
52-
private Verbosity verbosity = DEFAULT_VERBOSITY;
53-
private String[] verboseClasses;
5451

5552
/**
5653
* Specifies how verbose the StatusLogger should be.
54+
* @deprecated This class is not used anymore and only kept for binary backward compatibility.
5755
*/
56+
@Deprecated
5857
public enum Verbosity {
5958
QUIET,
6059
VERBOSE;
@@ -64,7 +63,9 @@ public enum Verbosity {
6463
*
6564
* @param value property value to parse.
6665
* @return enum corresponding to value, or QUIET by default.
66+
* @deprecated This class is not used anymore and only kept for binary backward compatibility.
6767
*/
68+
@Deprecated
6869
public static Verbosity toVerbosity(final String value) {
6970
return Boolean.parseBoolean(value) ? VERBOSE : QUIET;
7071
}
@@ -156,9 +157,10 @@ public StatusConfiguration withStatus(final Level status) {
156157
*
157158
* @param verbosity basic filter for status logger messages.
158159
* @return {@code this}
160+
* @deprecated This method is ineffective and only kept for binary backward compatibility.
159161
*/
162+
@Deprecated
160163
public StatusConfiguration withVerbosity(final String verbosity) {
161-
this.verbosity = Verbosity.toVerbosity(verbosity);
162164
return this;
163165
}
164166

@@ -167,9 +169,10 @@ public StatusConfiguration withVerbosity(final String verbosity) {
167169
*
168170
* @param verboseClasses names of classes to filter if not using VERBOSE.
169171
* @return {@code this}
172+
* @deprecated This method is ineffective and only kept for binary backward compatibility.
170173
*/
174+
@Deprecated
171175
public StatusConfiguration withVerboseClasses(final String... verboseClasses) {
172-
this.verboseClasses = verboseClasses;
173176
return this;
174177
}
175178

@@ -183,7 +186,8 @@ public void initialize() {
183186
} else {
184187
final boolean configured = configureExistingStatusConsoleListener();
185188
if (!configured) {
186-
registerNewStatusConsoleListener();
189+
final StatusConsoleListener listener = new StatusConsoleListener(this.status, this.destination);
190+
this.logger.registerListener(listener);
187191
}
188192
migrateSavedLogMessages();
189193
}
@@ -197,23 +201,12 @@ private boolean configureExistingStatusConsoleListener() {
197201
final StatusConsoleListener listener = (StatusConsoleListener) statusListener;
198202
listener.setLevel(this.status);
199203
this.logger.updateListenerLevel(this.status);
200-
if (this.verbosity == Verbosity.QUIET) {
201-
listener.setFilters(this.verboseClasses);
202-
}
203204
configured = true;
204205
}
205206
}
206207
return configured;
207208
}
208209

209-
private void registerNewStatusConsoleListener() {
210-
final StatusConsoleListener listener = new StatusConsoleListener(this.status, this.destination);
211-
if (this.verbosity == Verbosity.QUIET) {
212-
listener.setFilters(this.verboseClasses);
213-
}
214-
this.logger.registerListener(listener);
215-
}
216-
217210
private void migrateSavedLogMessages() {
218211
for (final String message : this.errorMessages) {
219212
this.logger.error(message);

0 commit comments

Comments
 (0)