Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@
*
*/
public class PatternFormatter {

/**
* The empty array.
*/
public static final PatternFormatter[] EMPTY_ARRAY = {};

private final LogEventPatternConverter converter;
private final FormattingInfo field;
private final boolean skipFormattingInfo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@
*/
package org.apache.logging.log4j.script;

import static org.apache.logging.log4j.util.Strings.toRootLowerCase;

import java.io.File;
import java.nio.file.Path;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
Expand Down Expand Up @@ -86,7 +87,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
this.watchManager = watchManager;
final List<ScriptEngineFactory> factories = manager.getEngineFactories();
allowedLanguages = Arrays.stream(Strings.splitList(scriptLanguages))
.map(String::toLowerCase)
.map(Strings::toRootLowerCase)
.collect(Collectors.toSet());
if (logger.isDebugEnabled()) {
final StringBuilder sb = new StringBuilder();
Expand All @@ -100,7 +101,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
final StringBuilder names = new StringBuilder();
final List<String> languageNames = factory.getNames();
for (final String name : languageNames) {
if (allowedLanguages.contains(name.toLowerCase(Locale.ROOT))) {
if (allowedLanguages.contains(toRootLowerCase(name))) {
if (names.length() > 0) {
names.append(", ");
}
Expand Down Expand Up @@ -132,7 +133,7 @@ public ScriptManagerImpl(final Configuration configuration, final WatchManager w
final StringBuilder names = new StringBuilder();
for (final ScriptEngineFactory factory : factories) {
for (final String name : factory.getNames()) {
if (allowedLanguages.contains(name.toLowerCase(Locale.ROOT))) {
if (allowedLanguages.contains(toRootLowerCase(name))) {
if (names.length() > 0) {
names.append(", ");
}
Expand Down Expand Up @@ -165,7 +166,7 @@ public void addScripts(final Node child) {
}

public boolean addScript(final Script script) {
if (allowedLanguages.contains(script.getLanguage().toLowerCase(Locale.ROOT))) {
if (allowedLanguages.contains(toRootLowerCase(script.getLanguage()))) {
final ScriptEngine engine = manager.getEngineByName(script.getLanguage());
if (engine == null) {
logger.error("No ScriptEngine found for language " + script.getLanguage()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ public ScriptPlugin(final String name, final String language, final String scrip
@PluginFactory
public static ScriptPlugin createScript(
// @formatter:off
@PluginAttribute final String name,
@PluginAttribute String language,
@PluginValue final String scriptText) {
@PluginAttribute("name") final String name,
@PluginAttribute(ATTR_LANGUAGE) String language,
@PluginValue(ATTR_SCRIPT_TEXT) final String scriptText) {
// @formatter:on
if (language == null) {
LOGGER.error("No '{}' attribute provided for {} plugin '{}'", ATTR_LANGUAGE, PLUGIN_NAME, name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package org.apache.logging.log4j.script.appender;

import java.util.Objects;
import org.apache.logging.log4j.core.AbstractLifeCycle;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
Expand Down Expand Up @@ -65,19 +64,19 @@ public static final class Builder implements org.apache.logging.log4j.plugins.ut
@Override
public Appender build() {
if (name == null) {
AbstractLifeCycle.LOGGER.error("Name missing.");
LOGGER.error("Name missing.");
return null;
}
if (script == null) {
AbstractLifeCycle.LOGGER.error("Script missing for ScriptAppenderSelector appender {}", name);
LOGGER.error("Script missing for ScriptAppenderSelector appender {}", name);
return null;
}
if (appenderSet == null) {
AbstractLifeCycle.LOGGER.error("AppenderSet missing for ScriptAppenderSelector appender {}", name);
LOGGER.error("AppenderSet missing for ScriptAppenderSelector appender {}", name);
return null;
}
if (configuration == null) {
AbstractLifeCycle.LOGGER.error("Configuration missing for ScriptAppenderSelector appender {}", name);
LOGGER.error("Configuration missing for ScriptAppenderSelector appender {}", name);
return null;
}
final ScriptManager scriptManager = configuration.getScriptManager();
Expand All @@ -89,15 +88,15 @@ public Appender build() {
return null;
}
final ScriptBindings bindings = scriptManager.createBindings(script);
AbstractLifeCycle.LOGGER.debug(
LOGGER.debug(
"ScriptAppenderSelector '{}' executing {} '{}': {}",
name,
script.getLanguage(),
script.getName(),
script.getScriptText());
final Object object = scriptManager.execute(script.getName(), bindings);
final String actualAppenderName = Objects.toString(object, null);
AbstractLifeCycle.LOGGER.debug("ScriptAppenderSelector '{}' selected '{}'", name, actualAppenderName);
LOGGER.debug("ScriptAppenderSelector '{}' selected '{}'", name, actualAppenderName);
return appenderSet.createAppender(actualAppenderName, name);
}

Expand Down Expand Up @@ -143,7 +142,8 @@ public static Builder newBuilder() {
return new Builder();
}

private ScriptAppenderSelector(final String name, final Filter filter, final Layout layout) {
private ScriptAppenderSelector(
final String name, final Filter filter, final Layout layout, final Property[] properties) {
super(name, filter, layout, true, Property.EMPTY_ARRAY);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ public ScriptCondition(final Script script, final Configuration configuration) {
/**
* Executes the script
*
* @param baseDir
* @param candidates
* @return
* @param basePath base directory for files to delete
* @param candidates a list of paths, that can be deleted by the script
* @return a list of paths selected to delete by the script execution
*/
@SuppressWarnings("unchecked")
public List<PathWithAttributes> selectFilesToDelete(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@
import org.apache.logging.log4j.core.config.AbstractConfiguration;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.arbiters.Arbiter;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginNode;
import org.apache.logging.log4j.core.script.Script;
import org.apache.logging.log4j.core.script.ScriptBindings;
import org.apache.logging.log4j.plugins.Configurable;
import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.plugins.PluginFactory;
import org.apache.logging.log4j.plugins.PluginNode;
import org.apache.logging.log4j.plugins.model.PluginType;
import org.apache.logging.log4j.script.ScriptManagerImpl;
import org.apache.logging.log4j.script.ScriptRef;
Expand Down Expand Up @@ -60,7 +60,7 @@ public boolean isCondition() {
return Boolean.parseBoolean(object.toString());
}

@PluginBuilderFactory
@PluginFactory
public static Builder newBuilder() {
return new Builder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,18 @@

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.core.AbstractLifeCycle;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.filter.AbstractFilter;
import org.apache.logging.log4j.core.script.Script;
import org.apache.logging.log4j.core.script.ScriptBindings;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.ObjectMessage;
import org.apache.logging.log4j.message.SimpleMessage;
import org.apache.logging.log4j.plugins.Configurable;
import org.apache.logging.log4j.plugins.Inject;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.plugins.PluginAttribute;
import org.apache.logging.log4j.plugins.PluginElement;
Expand Down Expand Up @@ -71,7 +70,7 @@ public Result filter(
bindings.putAll(configuration.getProperties());
bindings.put("substitutor", configuration.getStrSubstitutor());
final Object object = configuration.getScriptManager().execute(script.getName(), bindings);
return !Boolean.TRUE.equals(object) ? onMismatch : onMatch;
return object == null || !Boolean.TRUE.equals(object) ? onMismatch : onMatch;
}

@Override
Expand Down Expand Up @@ -132,15 +131,15 @@ public String toString() {
*/
// TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
@PluginFactory
@Inject
public static ScriptFilter createFilter(
@PluginElement final Script script,
@PluginAttribute final Result onMatch,
@PluginAttribute final Result onMismatch,
@PluginConfiguration final Configuration configuration) {
final Configuration configuration) {

if (script == null) {
AbstractLifeCycle.LOGGER.error(
"A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
LOGGER.error("A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
return null;
}
if (configuration.getScriptManager() == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,13 @@ public ScriptPatternSelector build() {
return null;
}
return new ScriptPatternSelector(
configuration,
script,
properties,
defaultPattern,
alwaysWriteExceptions,
disableAnsi,
noConsoleNoAnsi,
configuration);
noConsoleNoAnsi);
}

public Builder setScript(final AbstractScript script) {
Expand Down Expand Up @@ -165,13 +165,13 @@ public Builder setConfiguration(final Configuration config) {
private final boolean requiresLocation;

private ScriptPatternSelector(
final Configuration config,
final AbstractScript script,
final PatternMatch[] properties,
final String defaultPattern,
final boolean alwaysWriteExceptions,
final boolean disableAnsi,
final boolean noConsoleNoAnsi,
final Configuration config) {
final boolean noConsoleNoAnsi) {
this.script = script;
this.configuration = config;
final PatternParser parser = PatternLayout.createPatternParser(config);
Expand All @@ -180,7 +180,7 @@ private ScriptPatternSelector(
try {
final List<PatternFormatter> list =
parser.parse(property.getPattern(), alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
final PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
final PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
formatterMap.put(property.getKey(), formatters);
patternMap.put(property.getKey(), property.getPattern());
for (int i = 0; !needsLocation && i < formatters.length; ++i) {
Expand All @@ -193,7 +193,7 @@ private ScriptPatternSelector(
try {
final List<PatternFormatter> list =
parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
defaultFormatters = list.toArray(new PatternFormatter[list.size()]);
defaultFormatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
this.defaultPattern = defaultPattern;
for (int i = 0; !needsLocation && i < defaultFormatters.length; ++i) {
needsLocation = defaultFormatters[i].requiresLocation();
Expand Down
33 changes: 28 additions & 5 deletions log4j-slf4j-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,21 @@
<description>The Apache Log4j SLF4J API binding to Log4j 2 Core</description>
<properties>
<slf4j.version>1.7.36</slf4j.version>
<bnd.baseline.skip>false</bnd.baseline.skip>
</properties>

<!-- Use explicit versions as a temporary workaround to a Coursier/Ivy bug:
https://github.com/apache/logging-log4j2/issues/2065 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.osgi</groupId>
Expand All @@ -54,6 +68,12 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
Expand All @@ -64,6 +84,12 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
Expand All @@ -75,11 +101,6 @@
<artifactId>commons-lang3</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
Expand All @@ -93,6 +114,7 @@
</dependencies>
<build>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
Expand Down Expand Up @@ -129,6 +151,7 @@
</execution>
</executions>
</plugin>

</plugins>
</build>
</project>
36 changes: 0 additions & 36 deletions log4j-slf4j-impl/src/assembly/slf4j.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
*/
@Export
@Header(name = Constants.BUNDLE_ACTIVATIONPOLICY, value = Constants.ACTIVATION_LAZY)
@Version("2.21.0")
@Version("3.0.0")
package org.apache.logging.slf4j;

import org.osgi.annotation.bundle.Export;
Expand Down
Loading