Skip to content

Commit b89d758

Browse files
committed
Port log4j-script changes from 2.x
This PR adds to the `log4j-script` module the missing changes from the `2.x` branch. Since the module was created by moving classes from `log4j-core` the comparison between branches must be done file by file.
1 parent 7c5004c commit b89d758

File tree

8 files changed

+40
-34
lines changed

8 files changed

+40
-34
lines changed

log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
*
2323
*/
2424
public class PatternFormatter {
25+
26+
/**
27+
* The empty array.
28+
*/
29+
public static final PatternFormatter[] EMPTY_ARRAY = {};
30+
2531
private final LogEventPatternConverter converter;
2632
private final FormattingInfo field;
2733
private final boolean skipFormattingInfo;

log4j-script/src/main/java/org/apache/logging/log4j/script/ScriptManagerImpl.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616
*/
1717
package org.apache.logging.log4j.script;
1818

19+
import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
20+
1921
import java.io.File;
2022
import java.nio.file.Path;
2123
import java.security.AccessController;
2224
import java.security.PrivilegedAction;
2325
import java.util.Arrays;
2426
import java.util.List;
25-
import java.util.Locale;
2627
import java.util.Objects;
2728
import java.util.Set;
2829
import java.util.concurrent.ConcurrentHashMap;
@@ -86,7 +87,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
8687
this.watchManager = watchManager;
8788
final List<ScriptEngineFactory> factories = manager.getEngineFactories();
8889
allowedLanguages = Arrays.stream(Strings.splitList(scriptLanguages))
89-
.map(String::toLowerCase)
90+
.map(Strings::toRootLowerCase)
9091
.collect(Collectors.toSet());
9192
if (logger.isDebugEnabled()) {
9293
final StringBuilder sb = new StringBuilder();
@@ -100,7 +101,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
100101
final StringBuilder names = new StringBuilder();
101102
final List<String> languageNames = factory.getNames();
102103
for (final String name : languageNames) {
103-
if (allowedLanguages.contains(name.toLowerCase(Locale.ROOT))) {
104+
if (allowedLanguages.contains(toRootLowerCase(name))) {
104105
if (names.length() > 0) {
105106
names.append(", ");
106107
}
@@ -132,7 +133,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
132133
final StringBuilder names = new StringBuilder();
133134
for (final ScriptEngineFactory factory : factories) {
134135
for (final String name : factory.getNames()) {
135-
if (allowedLanguages.contains(name.toLowerCase(Locale.ROOT))) {
136+
if (allowedLanguages.contains(toRootLowerCase(name))) {
136137
if (names.length() > 0) {
137138
names.append(", ");
138139
}
@@ -165,7 +166,7 @@ public void addScripts(final Node child) {
165166
}
166167

167168
public boolean addScript(final Script script) {
168-
if (allowedLanguages.contains(script.getLanguage().toLowerCase(Locale.ROOT))) {
169+
if (allowedLanguages.contains(toRootLowerCase(script.getLanguage()))) {
169170
final ScriptEngine engine = manager.getEngineByName(script.getLanguage());
170171
if (engine == null) {
171172
logger.error("No ScriptEngine found for language " + script.getLanguage()

log4j-script/src/main/java/org/apache/logging/log4j/script/ScriptPlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ public ScriptPlugin(final String name, final String language, final String scrip
4040
@PluginFactory
4141
public static ScriptPlugin createScript(
4242
// @formatter:off
43-
@PluginAttribute final String name,
44-
@PluginAttribute String language,
45-
@PluginValue final String scriptText) {
43+
@PluginAttribute("name") final String name,
44+
@PluginAttribute(ATTR_LANGUAGE) String language,
45+
@PluginValue(ATTR_SCRIPT_TEXT) final String scriptText) {
4646
// @formatter:on
4747
if (language == null) {
4848
LOGGER.error("No '{}' attribute provided for {} plugin '{}'", ATTR_LANGUAGE, PLUGIN_NAME, name);

log4j-script/src/main/java/org/apache/logging/log4j/script/appender/ScriptAppenderSelector.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.apache.logging.log4j.script.appender;
1818

1919
import java.util.Objects;
20-
import org.apache.logging.log4j.core.AbstractLifeCycle;
2120
import org.apache.logging.log4j.core.Appender;
2221
import org.apache.logging.log4j.core.Filter;
2322
import org.apache.logging.log4j.core.Layout;
@@ -65,19 +64,19 @@ public static final class Builder implements org.apache.logging.log4j.plugins.ut
6564
@Override
6665
public Appender build() {
6766
if (name == null) {
68-
AbstractLifeCycle.LOGGER.error("Name missing.");
67+
LOGGER.error("Name missing.");
6968
return null;
7069
}
7170
if (script == null) {
72-
AbstractLifeCycle.LOGGER.error("Script missing for ScriptAppenderSelector appender {}", name);
71+
LOGGER.error("Script missing for ScriptAppenderSelector appender {}", name);
7372
return null;
7473
}
7574
if (appenderSet == null) {
76-
AbstractLifeCycle.LOGGER.error("AppenderSet missing for ScriptAppenderSelector appender {}", name);
75+
LOGGER.error("AppenderSet missing for ScriptAppenderSelector appender {}", name);
7776
return null;
7877
}
7978
if (configuration == null) {
80-
AbstractLifeCycle.LOGGER.error("Configuration missing for ScriptAppenderSelector appender {}", name);
79+
LOGGER.error("Configuration missing for ScriptAppenderSelector appender {}", name);
8180
return null;
8281
}
8382
final ScriptManager scriptManager = configuration.getScriptManager();
@@ -89,15 +88,15 @@ public Appender build() {
8988
return null;
9089
}
9190
final ScriptBindings bindings = scriptManager.createBindings(script);
92-
AbstractLifeCycle.LOGGER.debug(
91+
LOGGER.debug(
9392
"ScriptAppenderSelector '{}' executing {} '{}': {}",
9493
name,
9594
script.getLanguage(),
9695
script.getName(),
9796
script.getScriptText());
9897
final Object object = scriptManager.execute(script.getName(), bindings);
9998
final String actualAppenderName = Objects.toString(object, null);
100-
AbstractLifeCycle.LOGGER.debug("ScriptAppenderSelector '{}' selected '{}'", name, actualAppenderName);
99+
LOGGER.debug("ScriptAppenderSelector '{}' selected '{}'", name, actualAppenderName);
101100
return appenderSet.createAppender(actualAppenderName, name);
102101
}
103102

@@ -143,7 +142,8 @@ public static Builder newBuilder() {
143142
return new Builder();
144143
}
145144

146-
private ScriptAppenderSelector(final String name, final Filter filter, final Layout layout) {
145+
private ScriptAppenderSelector(
146+
final String name, final Filter filter, final Layout layout, final Property[] properties) {
147147
super(name, filter, layout, true, Property.EMPTY_ARRAY);
148148
}
149149

log4j-script/src/main/java/org/apache/logging/log4j/script/appender/rolling/action/ScriptCondition.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public ScriptCondition(final Script script, final Configuration configuration) {
6262
/**
6363
* Executes the script
6464
*
65-
* @param baseDir
66-
* @param candidates
67-
* @return
65+
* @param basePath base directory for files to delete
66+
* @param candidates a list of paths, that can be deleted by the script
67+
* @return a list of paths selected to delete by the script execution
6868
*/
6969
@SuppressWarnings("unchecked")
7070
public List<PathWithAttributes> selectFilesToDelete(

log4j-script/src/main/java/org/apache/logging/log4j/script/config/arbiter/ScriptArbiter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
import org.apache.logging.log4j.core.config.AbstractConfiguration;
2121
import org.apache.logging.log4j.core.config.Configuration;
2222
import org.apache.logging.log4j.core.config.arbiters.Arbiter;
23-
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
2423
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
25-
import org.apache.logging.log4j.core.config.plugins.PluginNode;
2624
import org.apache.logging.log4j.core.script.Script;
2725
import org.apache.logging.log4j.core.script.ScriptBindings;
2826
import org.apache.logging.log4j.plugins.Configurable;
2927
import org.apache.logging.log4j.plugins.Node;
3028
import org.apache.logging.log4j.plugins.Plugin;
29+
import org.apache.logging.log4j.plugins.PluginFactory;
30+
import org.apache.logging.log4j.plugins.PluginNode;
3131
import org.apache.logging.log4j.plugins.model.PluginType;
3232
import org.apache.logging.log4j.script.ScriptManagerImpl;
3333
import org.apache.logging.log4j.script.ScriptRef;
@@ -60,7 +60,7 @@ public boolean isCondition() {
6060
return Boolean.parseBoolean(object.toString());
6161
}
6262

63-
@PluginBuilderFactory
63+
@PluginFactory
6464
public static Builder newBuilder() {
6565
return new Builder();
6666
}

log4j-script/src/main/java/org/apache/logging/log4j/script/filter/ScriptFilter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,18 @@
1818

1919
import org.apache.logging.log4j.Level;
2020
import org.apache.logging.log4j.Marker;
21-
import org.apache.logging.log4j.core.AbstractLifeCycle;
2221
import org.apache.logging.log4j.core.Filter;
2322
import org.apache.logging.log4j.core.LogEvent;
2423
import org.apache.logging.log4j.core.Logger;
2524
import org.apache.logging.log4j.core.config.Configuration;
26-
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
2725
import org.apache.logging.log4j.core.filter.AbstractFilter;
2826
import org.apache.logging.log4j.core.script.Script;
2927
import org.apache.logging.log4j.core.script.ScriptBindings;
3028
import org.apache.logging.log4j.message.Message;
3129
import org.apache.logging.log4j.message.ObjectMessage;
3230
import org.apache.logging.log4j.message.SimpleMessage;
3331
import org.apache.logging.log4j.plugins.Configurable;
32+
import org.apache.logging.log4j.plugins.Inject;
3433
import org.apache.logging.log4j.plugins.Plugin;
3534
import org.apache.logging.log4j.plugins.PluginAttribute;
3635
import org.apache.logging.log4j.plugins.PluginElement;
@@ -71,7 +70,7 @@ public Result filter(
7170
bindings.putAll(configuration.getProperties());
7271
bindings.put("substitutor", configuration.getStrSubstitutor());
7372
final Object object = configuration.getScriptManager().execute(script.getName(), bindings);
74-
return !Boolean.TRUE.equals(object) ? onMismatch : onMatch;
73+
return object == null || !Boolean.TRUE.equals(object) ? onMismatch : onMatch;
7574
}
7675

7776
@Override
@@ -132,15 +131,15 @@ public String toString() {
132131
*/
133132
// TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
134133
@PluginFactory
134+
@Inject
135135
public static ScriptFilter createFilter(
136136
@PluginElement final Script script,
137137
@PluginAttribute final Result onMatch,
138138
@PluginAttribute final Result onMismatch,
139-
@PluginConfiguration final Configuration configuration) {
139+
final Configuration configuration) {
140140

141141
if (script == null) {
142-
AbstractLifeCycle.LOGGER.error(
143-
"A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
142+
LOGGER.error("A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
144143
return null;
145144
}
146145
if (configuration.getScriptManager() == null) {

log4j-script/src/main/java/org/apache/logging/log4j/script/layout/ScriptPatternSelector.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ public ScriptPatternSelector build() {
106106
return null;
107107
}
108108
return new ScriptPatternSelector(
109+
configuration,
109110
script,
110111
properties,
111112
defaultPattern,
112113
alwaysWriteExceptions,
113114
disableAnsi,
114-
noConsoleNoAnsi,
115-
configuration);
115+
noConsoleNoAnsi);
116116
}
117117

118118
public Builder setScript(final AbstractScript script) {
@@ -165,13 +165,13 @@ public Builder setConfiguration(final Configuration config) {
165165
private final boolean requiresLocation;
166166

167167
private ScriptPatternSelector(
168+
final Configuration config,
168169
final AbstractScript script,
169170
final PatternMatch[] properties,
170171
final String defaultPattern,
171172
final boolean alwaysWriteExceptions,
172173
final boolean disableAnsi,
173-
final boolean noConsoleNoAnsi,
174-
final Configuration config) {
174+
final boolean noConsoleNoAnsi) {
175175
this.script = script;
176176
this.configuration = config;
177177
final PatternParser parser = PatternLayout.createPatternParser(config);
@@ -180,7 +180,7 @@ private ScriptPatternSelector(
180180
try {
181181
final List<PatternFormatter> list =
182182
parser.parse(property.getPattern(), alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
183-
final PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
183+
final PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
184184
formatterMap.put(property.getKey(), formatters);
185185
patternMap.put(property.getKey(), property.getPattern());
186186
for (int i = 0; !needsLocation && i < formatters.length; ++i) {
@@ -193,7 +193,7 @@ private ScriptPatternSelector(
193193
try {
194194
final List<PatternFormatter> list =
195195
parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
196-
defaultFormatters = list.toArray(new PatternFormatter[list.size()]);
196+
defaultFormatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
197197
this.defaultPattern = defaultPattern;
198198
for (int i = 0; !needsLocation && i < defaultFormatters.length; ++i) {
199199
needsLocation = defaultFormatters[i].requiresLocation();

0 commit comments

Comments
 (0)