You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/11/11 13:44:36 UTC
[1/6] logging-log4j2 git commit: Add option disableAnsi to color
converters
Repository: logging-log4j2
Updated Branches:
refs/heads/LOG4J2-1685 [created] 028ae4b45
Add option disableAnsi to color converters
Option `disableAnsi` turns off ANSI color output in the
HighlightConverter and StyleConverter unconditionally. The existing
option `noConsoleNoAnsi` option only takes effect if System.console() is
null, which is not always the case. An example of this is when running
an application that writes to standard output inside a container or a
service wrapper.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/42f8f080
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/42f8f080
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/42f8f080
Branch: refs/heads/LOG4J2-1685
Commit: 42f8f0801776c0b9706fe5a0e3518bfa5c11c6b4
Parents: abf29af
Author: Raman Gupta <ro...@gmail.com>
Authored: Thu Nov 10 14:38:36 2016 -0500
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 13:15:36 2016 +0100
----------------------------------------------------------------------
.../core/appender/rolling/PatternProcessor.java | 2 +-
.../log4j/core/layout/AbstractCsvLayout.java | 4 +--
.../logging/log4j/core/layout/JsonLayout.java | 4 +--
.../core/layout/MarkerPatternSelector.java | 13 +++++----
.../log4j/core/layout/PatternLayout.java | 29 +++++++++++++++-----
.../log4j/core/layout/Rfc5424Layout.java | 4 +--
.../core/layout/ScriptPatternSelector.java | 11 ++++----
.../logging/log4j/core/layout/YamlLayout.java | 4 +--
.../logging/log4j/core/net/SmtpManager.java | 2 +-
.../log4j/core/pattern/HighlightConverter.java | 15 ++++++++--
.../log4j/core/pattern/PatternParser.java | 29 +++++++++++++-------
.../log4j/core/pattern/StyleConverter.java | 8 +++++-
.../log4j/core/layout/PatternLayoutTest.java | 2 +-
.../log4j/core/layout/PatternSelectorTest.java | 2 +-
.../core/pattern/HighlightConverterTest.java | 8 +++---
.../log4j/core/pattern/PatternParserTest2.java | 2 +-
.../log4j/perf/jmh/PatternLayoutBenchmark.java | 24 ++++++++--------
.../jmh/PatternLayoutComparisonBenchmark.java | 2 +-
.../perf/jmh/TextEncoderHelperBenchmark.java | 2 +-
.../perf/jmh/ThreadLocalVsPoolBenchmark.java | 2 +-
20 files changed, 107 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
index ca13769..6cfec53 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
@@ -78,7 +78,7 @@ public class PatternProcessor {
final PatternParser parser = createPatternParser();
final List<PatternConverter> converters = new ArrayList<>();
final List<FormattingInfo> fields = new ArrayList<>();
- parser.parse(pattern, converters, fields, false, false);
+ parser.parse(pattern, converters, fields, false, false, false);
final FormattingInfo[] infoArray = new FormattingInfo[fields.size()];
patternFields = fields.toArray(infoArray);
final ArrayPatternConverter[] converterArray = new ArrayPatternConverter[converters.size()];
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
index ffa6ea6..d56bc89 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
@@ -67,8 +67,8 @@ public abstract class AbstractCsvLayout extends AbstractStringLayout {
protected AbstractCsvLayout(final Configuration config, final Charset charset, final CSVFormat csvFormat,
final String header, final String footer) {
- super(config, charset, PatternLayout.createSerializer(config, null, header, null, null, false, false),
- PatternLayout.createSerializer(config, null, footer, null, null, false, false));
+ super(config, charset, PatternLayout.createSerializer(config, null, header, null, null, false, false, false),
+ PatternLayout.createSerializer(config, null, footer, null, null, false, false, false));
this.format = csvFormat;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
index df1d4ea..a03ce65 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
@@ -814,8 +814,8 @@ public final class JsonLayout extends AbstractJacksonLayout {
super(config, new JacksonFactory.JSON(encodeThreadContextAsList, includeStacktrace).newWriter(
locationInfo, properties, compact),
charset, compact, complete, eventEol,
- PatternLayout.createSerializer(config, null, headerPattern, DEFAULT_HEADER, null, false, false),
- PatternLayout.createSerializer(config, null, footerPattern, DEFAULT_FOOTER, null, false, false));
+ PatternLayout.createSerializer(config, null, headerPattern, DEFAULT_HEADER, null, false, false, false),
+ PatternLayout.createSerializer(config, null, footerPattern, DEFAULT_FOOTER, null, false, false, false));
}
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
index 17242cb..172df82 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
@@ -52,12 +52,13 @@ public class MarkerPatternSelector implements PatternSelector {
public MarkerPatternSelector(final PatternMatch[] properties, final String defaultPattern,
- final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi,
- final Configuration config) {
+ final boolean alwaysWriteExceptions, final boolean disableAnsi,
+ final boolean noConsoleNoAnsi, final Configuration config) {
final PatternParser parser = PatternLayout.createPatternParser(config);
for (final PatternMatch property : properties) {
try {
- final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions, noConsoleNoAnsi);
+ final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions,
+ disableAnsi, noConsoleNoAnsi);
formatterMap.put(property.getKey(), list.toArray(new PatternFormatter[list.size()]));
patternMap.put(property.getKey(), property.getPattern());
} catch (final RuntimeException ex) {
@@ -65,7 +66,8 @@ public class MarkerPatternSelector implements PatternSelector {
}
}
try {
- final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi);
+ final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi,
+ noConsoleNoAnsi);
defaultFormatters = list.toArray(new PatternFormatter[list.size()]);
this.defaultPattern = defaultPattern;
} catch (final RuntimeException ex) {
@@ -92,6 +94,7 @@ public class MarkerPatternSelector implements PatternSelector {
public static MarkerPatternSelector createSelector(@PluginElement("PatternMatch") final PatternMatch[] properties,
@PluginAttribute("defaultPattern") String defaultPattern,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
+ @PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
@PluginConfiguration final Configuration config) {
if (defaultPattern == null) {
@@ -102,7 +105,7 @@ public class MarkerPatternSelector implements PatternSelector {
return null;
}
return new MarkerPatternSelector(properties, defaultPattern, alwaysWriteExceptions,
- noConsoleNoAnsi, config);
+ disableAnsi, noConsoleNoAnsi, config);
}
@Override
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 2c235f4..284222d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -93,6 +93,8 @@ public final class PatternLayout extends AbstractStringLayout {
* @param charset The character set.
* @param alwaysWriteExceptions Whether or not exceptions should always be handled in this pattern (if {@code true},
* exceptions will be written even if the pattern does not specify so).
+ * @param disableAnsi
+ * If {@code "true"}, do not output ANSI escape codes
* @param noConsoleNoAnsi
* If {@code "true"} (default) and {@link System#console()} is null, do not output ANSI escape codes
* @param headerPattern header conversion pattern.
@@ -100,21 +102,22 @@ public final class PatternLayout extends AbstractStringLayout {
*/
private PatternLayout(final Configuration config, final RegexReplacement replace, final String eventPattern,
final PatternSelector patternSelector, final Charset charset, final boolean alwaysWriteExceptions,
- final boolean noConsoleNoAnsi, final String headerPattern, final String footerPattern) {
+ final boolean disableAnsi, final boolean noConsoleNoAnsi, final String headerPattern,
+ final String footerPattern) {
super(config, charset,
createSerializer(config, replace, headerPattern, null, patternSelector, alwaysWriteExceptions,
- noConsoleNoAnsi),
+ disableAnsi, noConsoleNoAnsi),
createSerializer(config, replace, footerPattern, null, patternSelector, alwaysWriteExceptions,
- noConsoleNoAnsi));
+ disableAnsi, noConsoleNoAnsi));
this.conversionPattern = eventPattern;
this.patternSelector = patternSelector;
this.eventSerializer = createSerializer(config, replace, eventPattern, DEFAULT_CONVERSION_PATTERN,
- patternSelector, alwaysWriteExceptions, noConsoleNoAnsi);
+ patternSelector, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
}
public static Serializer createSerializer(final Configuration configuration, final RegexReplacement replace,
final String pattern, final String defaultPattern, final PatternSelector patternSelector,
- final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi) {
+ final boolean alwaysWriteExceptions, boolean disableAnsi, final boolean noConsoleNoAnsi) {
if (Strings.isEmpty(pattern) && Strings.isEmpty(defaultPattern)) {
return null;
}
@@ -122,7 +125,7 @@ public final class PatternLayout extends AbstractStringLayout {
try {
final PatternParser parser = createPatternParser(configuration);
final List<PatternFormatter> list = parser.parse(pattern == null ? defaultPattern : pattern,
- alwaysWriteExceptions, noConsoleNoAnsi);
+ alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
final PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
return new PatternSerializer(formatters, replace);
} catch (final RuntimeException ex) {
@@ -233,6 +236,8 @@ public final class PatternLayout extends AbstractStringLayout {
* The character set. The platform default is used if not specified.
* @param alwaysWriteExceptions
* If {@code "true"} (default) exceptions are always written even if the pattern contains no exception tokens.
+ * @param disableAnsi
+ * If {@code "true"} (default is false), do not output ANSI escape codes
* @param noConsoleNoAnsi
* If {@code "true"} (default is false) and {@link System#console()} is null, do not output ANSI escape codes
* @param headerPattern
@@ -250,6 +255,7 @@ public final class PatternLayout extends AbstractStringLayout {
// LOG4J2-783 use platform default by default, so do not specify defaultString for charset
@PluginAttribute(value = "charset") final Charset charset,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
+ @PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
@PluginAttribute("header") final String headerPattern,
@PluginAttribute("footer") final String footerPattern) {
@@ -260,6 +266,7 @@ public final class PatternLayout extends AbstractStringLayout {
.withRegexReplacement(replace)
.withCharset(charset)
.withAlwaysWriteExceptions(alwaysWriteExceptions)
+ .withDisableAnsi(disableAnsi)
.withNoConsoleNoAnsi(noConsoleNoAnsi)
.withHeader(headerPattern)
.withFooter(footerPattern)
@@ -424,6 +431,9 @@ public final class PatternLayout extends AbstractStringLayout {
private boolean alwaysWriteExceptions = true;
@PluginBuilderAttribute
+ private boolean disableAnsi;
+
+ @PluginBuilderAttribute
private boolean noConsoleNoAnsi;
@PluginBuilderAttribute
@@ -470,6 +480,11 @@ public final class PatternLayout extends AbstractStringLayout {
return this;
}
+ public Builder withDisableAnsi(final boolean disableAnsi) {
+ this.disableAnsi = disableAnsi;
+ return this;
+ }
+
public Builder withNoConsoleNoAnsi(final boolean noConsoleNoAnsi) {
this.noConsoleNoAnsi = noConsoleNoAnsi;
return this;
@@ -492,7 +507,7 @@ public final class PatternLayout extends AbstractStringLayout {
configuration = new DefaultConfiguration();
}
return new PatternLayout(configuration, regexReplacement, pattern, patternSelector, charset,
- alwaysWriteExceptions, noConsoleNoAnsi, header, footer);
+ alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi, header, footer);
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
index cde4b36..b4f4a96 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
@@ -128,7 +128,7 @@ public final class Rfc5424Layout extends AbstractStringLayout {
final String exceptionPattern, final boolean useTLSMessageFormat, final LoggerFields[] loggerFields) {
super(charset);
final PatternParser exceptionParser = createPatternParser(config, ThrowablePatternConverter.class);
- exceptionFormatters = exceptionPattern == null ? null : exceptionParser.parse(exceptionPattern, false, false);
+ exceptionFormatters = exceptionPattern == null ? null : exceptionParser.parse(exceptionPattern, false, false, false);
this.facility = facility;
this.defaultId = id == null ? DEFAULT_ID : id;
this.enterpriseNumber = ein;
@@ -207,7 +207,7 @@ public final class Rfc5424Layout extends AbstractStringLayout {
final PatternParser fieldParser = createPatternParser(config, null);
for (final Map.Entry<String, String> entry : fields.entrySet()) {
- final List<PatternFormatter> formatters = fieldParser.parse(entry.getValue(), false, false);
+ final List<PatternFormatter> formatters = fieldParser.parse(entry.getValue(), false, false, false);
sdParams.put(entry.getKey(), formatters);
}
final FieldFormatter fieldFormatter = new FieldFormatter(sdParams,
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
index 7f926b7..48dba2e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
@@ -56,8 +56,8 @@ public class ScriptPatternSelector implements PatternSelector {
public ScriptPatternSelector(final AbstractScript script, final PatternMatch[] properties, final String defaultPattern,
- final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi,
- final Configuration config) {
+ final boolean alwaysWriteExceptions, final boolean disablAnsi,
+ final boolean noConsoleNoAnsi, final Configuration config) {
this.script = script;
this.configuration = config;
if (!(script instanceof ScriptRef)) {
@@ -66,7 +66,7 @@ public class ScriptPatternSelector implements PatternSelector {
final PatternParser parser = PatternLayout.createPatternParser(config);
for (final PatternMatch property : properties) {
try {
- final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions, noConsoleNoAnsi);
+ final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions, disablAnsi, noConsoleNoAnsi);
formatterMap.put(property.getKey(), list.toArray(new PatternFormatter[list.size()]));
patternMap.put(property.getKey(), property.getPattern());
} catch (final RuntimeException ex) {
@@ -74,7 +74,7 @@ public class ScriptPatternSelector implements PatternSelector {
}
}
try {
- final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi);
+ final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, disablAnsi, noConsoleNoAnsi);
defaultFormatters = list.toArray(new PatternFormatter[list.size()]);
this.defaultPattern = defaultPattern;
} catch (final RuntimeException ex) {
@@ -103,6 +103,7 @@ public class ScriptPatternSelector implements PatternSelector {
@PluginElement("PatternMatch") final PatternMatch[] properties,
@PluginAttribute("defaultPattern") String defaultPattern,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
+ @PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
@PluginConfiguration final Configuration config) {
if (script == null) {
@@ -122,7 +123,7 @@ public class ScriptPatternSelector implements PatternSelector {
LOGGER.warn("No marker patterns were provided");
return null;
}
- return new ScriptPatternSelector(script, properties, defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi, config);
+ return new ScriptPatternSelector(script, properties, defaultPattern, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi, config);
}
@Override
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
index 52837c8..ed25d10 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
@@ -713,8 +713,8 @@ public final class YamlLayout extends AbstractJacksonLayout {
final String footerPattern, final Charset charset, final boolean includeStacktrace) {
super(config, new JacksonFactory.YAML(includeStacktrace).newWriter(locationInfo, properties, compact), charset, compact,
complete, eventEol,
- PatternLayout.createSerializer(config, null, headerPattern, DEFAULT_HEADER, null, false, false),
- PatternLayout.createSerializer(config, null, footerPattern, DEFAULT_FOOTER, null, false, false));
+ PatternLayout.createSerializer(config, null, headerPattern, DEFAULT_HEADER, null, false, false, false),
+ PatternLayout.createSerializer(config, null, footerPattern, DEFAULT_FOOTER, null, false, false, false));
}
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
index 5494911..2b45cb7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
@@ -141,7 +141,7 @@ public class SmtpManager extends AbstractManager {
sb.append(filterName);
final String name = "SMTP:" + NameUtil.md5(sb.toString());
- final Serializer subjectSerializer = PatternLayout.createSerializer(config, null, subject, null, null, false, false);
+ final Serializer subjectSerializer = PatternLayout.createSerializer(config, null, subject, null, null, false, false, false);
return getManager(name, FACTORY, new FactoryData(to, cc, bcc, from, replyTo, subjectSerializer,
protocol, host, port, username, password, isDebug, numElements));
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
index eb46a7a..5ab92bd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
@@ -66,6 +66,14 @@ import org.apache.logging.log4j.util.Strings;
* You can use whitespace around the comma and equal sign. The names in values MUST come from the
* {@linkplain AnsiEscape} enum, case is normalized to upper-case internally.
* </p>
+ *
+ * <p>
+ * To disable ANSI output unconditionally, specify an additional option <code>disableAnsi=true</code>, or to
+ * disable ANSI output if no console is detected, specify option <code>noConsoleNoAnsi=true</code> e.g..
+ * </p>
+ * <pre>
+ * %highlight{%d{ ISO8601 } [%t] %-5level: %msg%n%throwable}{STYLE=DEFAULT, noConsoleNoAnsi=true}
+ * </pre>
*/
@Plugin(name = "highlight", category = PatternConverter.CATEGORY)
@ConverterKeys({ "highlight" })
@@ -137,7 +145,9 @@ public final class HighlightConverter extends LogEventPatternConverter implement
return DEFAULT_STYLES;
}
// Feels like a hack. Should String[] options change to a Map<String,String>?
- final String string = options[1].replaceAll(PatternParser.NO_CONSOLE_NO_ANSI + "=(true|false)", Strings.EMPTY);
+ final String string = options[1]
+ .replaceAll(PatternParser.DISABLE_ANSI + "=(true|false)", Strings.EMPTY)
+ .replaceAll(PatternParser.NO_CONSOLE_NO_ANSI + "=(true|false)", Strings.EMPTY);
//
final Map<String, String> styles = AnsiEscape.createMap(string, new String[] {STYLE_KEY});
final Map<Level, String> levelStyles = new HashMap<>(DEFAULT_STYLES);
@@ -184,8 +194,9 @@ public final class HighlightConverter extends LogEventPatternConverter implement
}
final PatternParser parser = PatternLayout.createPatternParser(config);
final List<PatternFormatter> formatters = parser.parse(options[0]);
+ final boolean disableAnsi = Arrays.toString(options).contains(PatternParser.DISABLE_ANSI + "=true");
final boolean noConsoleNoAnsi = Arrays.toString(options).contains(PatternParser.NO_CONSOLE_NO_ANSI + "=true");
- final boolean hideAnsi = noConsoleNoAnsi && System.console() == null;
+ final boolean hideAnsi = disableAnsi || (noConsoleNoAnsi && System.console() == null);
return new HighlightConverter(formatters, createLevelStyleMap(options), hideAnsi);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index 4adb90a..cadf0fb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -41,6 +41,7 @@ import org.apache.logging.log4j.util.Strings;
* PatternConverters}.
*/
public final class PatternParser {
+ static final String DISABLE_ANSI = "disableAnsi";
static final String NO_CONSOLE_NO_ANSI = "noConsoleNoAnsi";
/**
@@ -159,16 +160,16 @@ public final class PatternParser {
}
public List<PatternFormatter> parse(final String pattern) {
- return parse(pattern, false, false);
+ return parse(pattern, false, false, false);
}
public List<PatternFormatter> parse(final String pattern, final boolean alwaysWriteExceptions,
- final boolean noConsoleNoAnsi) {
+ boolean disableAnsi, final boolean noConsoleNoAnsi) {
final List<PatternFormatter> list = new ArrayList<>();
final List<PatternConverter> converters = new ArrayList<>();
final List<FormattingInfo> fields = new ArrayList<>();
- parse(pattern, converters, fields, noConsoleNoAnsi, true);
+ parse(pattern, converters, fields, disableAnsi, noConsoleNoAnsi, true);
final Iterator<FormattingInfo> fieldIter = fields.iterator();
boolean handlesThrowable = false;
@@ -304,6 +305,8 @@ public final class PatternParser {
* list to receive pattern converters.
* @param formattingInfos
* list to receive field specifiers corresponding to pattern converters.
+ * @param disableAnsi
+ * if all ansi color codes should be disabled.
* @param noConsoleNoAnsi
* TODO
* @param convertBackslashes if {@code true}, backslash characters are treated as escape characters and character
@@ -311,7 +314,7 @@ public final class PatternParser {
*/
public void parse(final String pattern, final List<PatternConverter> patternConverters,
final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi,
- final boolean convertBackslashes) {
+ final boolean disableAnsi, final boolean convertBackslashes) {
Objects.requireNonNull(pattern, "pattern");
final StringBuilder currentLiteral = new StringBuilder(BUF_SIZE);
@@ -384,7 +387,7 @@ public final class PatternParser {
state = ParserState.MIN_STATE;
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, convertBackslashes);
+ patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
// Next pattern is assumed to be a literal.
state = ParserState.LITERAL_STATE;
@@ -406,7 +409,7 @@ public final class PatternParser {
state = ParserState.DOT_STATE;
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, convertBackslashes);
+ patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
state = ParserState.LITERAL_STATE;
formattingInfo = FormattingInfo.getDefault();
currentLiteral.setLength(0);
@@ -447,7 +450,7 @@ public final class PatternParser {
formattingInfo.getMaxLength() * DECIMAL + c - '0', formattingInfo.isLeftTruncate());
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, convertBackslashes);
+ patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
state = ParserState.LITERAL_STATE;
formattingInfo = FormattingInfo.getDefault();
currentLiteral.setLength(0);
@@ -480,7 +483,8 @@ public final class PatternParser {
* @return converter or null.
*/
private PatternConverter createConverter(final String converterId, final StringBuilder currentLiteral,
- final Map<String, Class<PatternConverter>> rules, final List<String> options, final boolean noConsoleNoAnsi) {
+ final Map<String, Class<PatternConverter>> rules, final List<String> options, final boolean noConsoleNoAnsi,
+ final boolean disableAnsi) {
String converterName = converterId;
Class<PatternConverter> converterClass = null;
@@ -499,6 +503,7 @@ public final class PatternParser {
}
if (AnsiConverter.class.isAssignableFrom(converterClass)) {
+ options.add(DISABLE_ANSI + '=' + disableAnsi);
options.add(NO_CONSOLE_NO_ANSI + '=' + noConsoleNoAnsi);
}
// Work around the regression bug in Class.getDeclaredMethods() in Oracle Java in version > 1.6.0_17:
@@ -582,6 +587,8 @@ public final class PatternParser {
* list to receive corresponding field specifier.
* @param noConsoleNoAnsi
* TODO
+ * @param disableAnsi
+ * if all ansi color codes should be disabled.
* @param convertBackslashes if {@code true}, backslash characters are treated as escape characters and character
* sequences like "\" followed by "t" (backslash+t) are converted to special characters like '\t' (tab).
* @return position after format specifier sequence.
@@ -589,7 +596,8 @@ public final class PatternParser {
private int finalizeConverter(final char c, final String pattern, final int start,
final StringBuilder currentLiteral, final FormattingInfo formattingInfo,
final Map<String, Class<PatternConverter>> rules, final List<PatternConverter> patternConverters,
- final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi, final boolean convertBackslashes) {
+ final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi, final boolean disableAnsi,
+ final boolean convertBackslashes) {
int i = start;
final StringBuilder convBuf = new StringBuilder();
i = extractConverter(c, pattern, i, convBuf, currentLiteral);
@@ -599,7 +607,8 @@ public final class PatternParser {
final List<String> options = new ArrayList<>();
i = extractOptions(pattern, i, options);
- final PatternConverter pc = createConverter(converterId, currentLiteral, rules, options, noConsoleNoAnsi);
+ final PatternConverter pc = createConverter(converterId, currentLiteral, rules, options, noConsoleNoAnsi,
+ disableAnsi);
if (pc == null) {
StringBuilder msg;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
index 3c100e3..821005a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
@@ -28,6 +28,11 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
/**
* Style pattern converter. Adds ANSI color styling to the result of the enclosed pattern.
+ *
+ * <p>
+ * To disable ANSI output unconditionally, specify an additional option <code>disableAnsi=true</code>, or to
+ * disable ANSI output if no console is detected, specify option <code>noConsoleNoAnsi=true</code>.
+ * </p>
*/
@Plugin(name = "style", category = PatternConverter.CATEGORY)
@ConverterKeys({ "style" })
@@ -86,8 +91,9 @@ public final class StyleConverter extends LogEventPatternConverter implements An
final PatternParser parser = PatternLayout.createPatternParser(config);
final List<PatternFormatter> formatters = parser.parse(options[0]);
final String style = AnsiEscape.createSequence(options[1].split(Patterns.COMMA_SEPARATOR));
+ final boolean disableAnsi = Arrays.toString(options).contains(PatternParser.DISABLE_ANSI + "=true");
final boolean noConsoleNoAnsi = Arrays.toString(options).contains(PatternParser.NO_CONSOLE_NO_ANSI + "=true");
- final boolean hideAnsi = noConsoleNoAnsi && System.console() == null;
+ final boolean hideAnsi = disableAnsi || (noConsoleNoAnsi && System.console() == null);
return new StyleConverter(formatters, style, hideAnsi);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
index aab5896..8276a36 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
@@ -236,7 +236,7 @@ public class PatternLayoutTest {
public void testPatternSelector() throws Exception {
final PatternMatch[] patterns = new PatternMatch[1];
patterns[0] = new PatternMatch("FLOW", "%d %-5p [%t]: ====== %C{1}.%M:%L %m ======%n");
- final PatternSelector selector = MarkerPatternSelector.createSelector(patterns, "%d %-5p [%t]: %m%n", true, true, ctx.getConfiguration());
+ final PatternSelector selector = MarkerPatternSelector.createSelector(patterns, "%d %-5p [%t]: %m%n", true, true, true, ctx.getConfiguration());
final PatternLayout layout = PatternLayout.newBuilder().withPatternSelector(selector)
.withConfiguration(ctx.getConfiguration()).build();
final LogEvent event1 = Log4jLogEvent.newBuilder() //
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternSelectorTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternSelectorTest.java
index 152c605..0949ab0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternSelectorTest.java
@@ -41,7 +41,7 @@ public class PatternSelectorTest {
public void testPatternSelector() throws Exception {
final PatternMatch[] patterns = new PatternMatch[1];
patterns[0] = new PatternMatch("FLOW", "%d %-5p [%t]: ====== %C{1}.%M:%L %m ======%n");
- final PatternSelector selector = MarkerPatternSelector.createSelector(patterns, "%d %-5p [%t]: %m%n", true, true, ctx.getConfiguration());
+ final PatternSelector selector = MarkerPatternSelector.createSelector(patterns, "%d %-5p [%t]: %m%n", true, true, true, ctx.getConfiguration());
final PatternLayout layout = PatternLayout.newBuilder().withPatternSelector(selector)
.withConfiguration(ctx.getConfiguration()).build();
final LogEvent event1 = Log4jLogEvent.newBuilder() //
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
index 6051f85..37b803b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
@@ -30,7 +30,7 @@ public class HighlightConverterTest {
@Test
public void testAnsiEmpty() {
- final String[] options = {"", PatternParser.NO_CONSOLE_NO_ANSI + "=false"};
+ final String[] options = {"", PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI + "=false"};
final HighlightConverter converter = HighlightConverter.newInstance(null, options);
final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
@@ -42,7 +42,7 @@ public class HighlightConverterTest {
@Test
public void testAnsiNonEmpty() {
- final String[] options = {"%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false"};
+ final String[] options = {"%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI + "=false"};
final HighlightConverter converter = HighlightConverter.newInstance(null, options);
final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
@@ -54,7 +54,7 @@ public class HighlightConverterTest {
@Test
public void testNoAnsiEmpty() {
- final String[] options = {"", PatternParser.NO_CONSOLE_NO_ANSI + "=true"};
+ final String[] options = {"", PatternParser.DISABLE_ANSI + "=true"};
final HighlightConverter converter = HighlightConverter.newInstance(null, options);
final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
@@ -66,7 +66,7 @@ public class HighlightConverterTest {
@Test
public void testNoAnsiNonEmpty() {
- final String[] options = {"%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=true"};
+ final String[] options = {"%-5level: %msg", PatternParser.DISABLE_ANSI + "=true"};
final HighlightConverter converter = HighlightConverter.newInstance(null, options);
final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
index ded0675..45c0a8b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
@@ -64,7 +64,7 @@ public class PatternParserTest2 {
final PatternParser parser0 = new PatternParser(null, "Converter", null);
final List<PatternConverter> converters = new ArrayList<>();
final List<FormattingInfo> fields = new ArrayList<>();
- parser0.parse(pattern, converters, fields, false, convert);
+ parser0.parse(pattern, converters, fields, false, false, convert);
final FormattingInfo[] infoArray = new FormattingInfo[fields.size()];
final FormattingInfo[] patternFields = fields.toArray(infoArray);
final ArrayPatternConverter[] converterArray = new ArrayPatternConverter[converters.size()];
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
index 8d39732..c7b5948 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
@@ -60,18 +60,18 @@ public class PatternLayoutBenchmark {
private static final String DEFAULT_ENCODING = CHARSET_DEFAULT.name();
private static final String STRING_SHIFT_JIS = "SHIFT_JIS";
private static final Charset CHARSET_SHIFT_JIS = Charset.forName(STRING_SHIFT_JIS);
- private final PatternLayout PATTERN_M = PatternLayout.createLayout("%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_SPACE = PatternLayout.createLayout(" ", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_C = PatternLayout.createLayout("%c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_D = PatternLayout.createLayout("%d %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_C = PatternLayout.createLayout("%c%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_D = PatternLayout.createLayout("%d%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_D_NOSPACE = PatternLayout.createLayout("%d%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_C_NOSPACE = PatternLayout.createLayout("%c%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_EX = PatternLayout.createLayout("%m %ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_D_EX = PatternLayout.createLayout("%d %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
- private final PatternLayout PATTERN_M_C_D_EX = PatternLayout.createLayout("%d %c %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M = PatternLayout.createLayout("%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_SPACE = PatternLayout.createLayout(" ", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_C = PatternLayout.createLayout("%c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_D = PatternLayout.createLayout("%d %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_C = PatternLayout.createLayout("%c%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_D = PatternLayout.createLayout("%d%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_D_NOSPACE = PatternLayout.createLayout("%d%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_C_NOSPACE = PatternLayout.createLayout("%c%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_EX = PatternLayout.createLayout("%m %ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_D_EX = PatternLayout.createLayout("%d %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_C_D_EX = PatternLayout.createLayout("%d %c %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
private static LogEvent createLogEvent() {
final Marker marker = null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
index 0bcf3da..ab9cd97 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
@@ -60,7 +60,7 @@ public class PatternLayoutComparisonBenchmark {
private static final Charset CHARSET_DEFAULT = Charset.defaultCharset();
private static final String LOG4JPATTERN = "%d %5p [%t] %c{1} %X{transactionId} - %m%n";
private final PatternLayout LOG4J2_PATTERN_LAYOUT = PatternLayout.createLayout(LOG4JPATTERN, null,
- null, null, CHARSET_DEFAULT, false, true, null, null);
+ null, null, CHARSET_DEFAULT, false, true, true, null, null);
private static LogEvent createLog4j2Event() {
final Marker marker = null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
index bf67c9d..d619399 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
@@ -61,7 +61,7 @@ public class TextEncoderHelperBenchmark {
final static LogEvent EVENT = createLogEvent();
private static final Charset CHARSET_DEFAULT = Charset.defaultCharset();
- private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
private final Destination destination = new Destination();
class Destination implements ByteBufferDestination {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/42f8f080/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
index 831c4f8..4aeeb90 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
@@ -80,7 +80,7 @@ public class ThreadLocalVsPoolBenchmark {
private static PatternFormatter[] createFormatters() {
final Configuration config = new DefaultConfiguration();
final PatternParser parser = new PatternParser(config, "Converter", LogEventPatternConverter.class);
- final List<PatternFormatter> result = parser.parse(LOG4JPATTERN, false, true);
+ final List<PatternFormatter> result = parser.parse(LOG4JPATTERN, false, false, true);
return result.toArray(new PatternFormatter[result.size()]);
}
[4/6] logging-log4j2 git commit: LOG4J2-1685 Consistent parameter
order
Posted by mi...@apache.org.
LOG4J2-1685 Consistent parameter order
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3baa703b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3baa703b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3baa703b
Branch: refs/heads/LOG4J2-1685
Commit: 3baa703bc78f8ff5d92580bd1b743066b285d036
Parents: 375eb14
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 13:52:14 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 13:52:14 2016 +0100
----------------------------------------------------------------------
.../log4j/core/pattern/PatternParser.java | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3baa703b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index 42e8adb..3d14830 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -313,8 +313,8 @@ public final class PatternParser {
* sequences like "\" followed by "t" (backslash+t) are converted to special characters like '\t' (tab).
*/
public void parse(final String pattern, final List<PatternConverter> patternConverters,
- final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi,
- final boolean disableAnsi, final boolean convertBackslashes) {
+ final List<FormattingInfo> formattingInfos, final boolean disableAnsi,
+ final boolean noConsoleNoAnsi, final boolean convertBackslashes) {
Objects.requireNonNull(pattern, "pattern");
final StringBuilder currentLiteral = new StringBuilder(BUF_SIZE);
@@ -387,7 +387,7 @@ public final class PatternParser {
state = ParserState.MIN_STATE;
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
+ patternConverters, formattingInfos, disableAnsi, noConsoleNoAnsi, convertBackslashes);
// Next pattern is assumed to be a literal.
state = ParserState.LITERAL_STATE;
@@ -409,7 +409,7 @@ public final class PatternParser {
state = ParserState.DOT_STATE;
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
+ patternConverters, formattingInfos, disableAnsi, noConsoleNoAnsi, convertBackslashes);
state = ParserState.LITERAL_STATE;
formattingInfo = FormattingInfo.getDefault();
currentLiteral.setLength(0);
@@ -450,7 +450,7 @@ public final class PatternParser {
formattingInfo.getMaxLength() * DECIMAL + c - '0', formattingInfo.isLeftTruncate());
} else {
i = finalizeConverter(c, pattern, i, currentLiteral, formattingInfo, converterRules,
- patternConverters, formattingInfos, noConsoleNoAnsi, disableAnsi, convertBackslashes);
+ patternConverters, formattingInfos, disableAnsi, noConsoleNoAnsi, convertBackslashes);
state = ParserState.LITERAL_STATE;
formattingInfo = FormattingInfo.getDefault();
currentLiteral.setLength(0);
@@ -486,8 +486,8 @@ public final class PatternParser {
* @return converter or null.
*/
private PatternConverter createConverter(final String converterId, final StringBuilder currentLiteral,
- final Map<String, Class<PatternConverter>> rules, final List<String> options, final boolean noConsoleNoAnsi,
- final boolean disableAnsi) {
+ final Map<String, Class<PatternConverter>> rules, final List<String> options, final boolean disableAnsi,
+ final boolean noConsoleNoAnsi) {
String converterName = converterId;
Class<PatternConverter> converterClass = null;
@@ -599,7 +599,7 @@ public final class PatternParser {
private int finalizeConverter(final char c, final String pattern, final int start,
final StringBuilder currentLiteral, final FormattingInfo formattingInfo,
final Map<String, Class<PatternConverter>> rules, final List<PatternConverter> patternConverters,
- final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi, final boolean disableAnsi,
+ final List<FormattingInfo> formattingInfos, final boolean disableAnsi, final boolean noConsoleNoAnsi,
final boolean convertBackslashes) {
int i = start;
final StringBuilder convBuf = new StringBuilder();
@@ -610,8 +610,8 @@ public final class PatternParser {
final List<String> options = new ArrayList<>();
i = extractOptions(pattern, i, options);
- final PatternConverter pc = createConverter(converterId, currentLiteral, rules, options, noConsoleNoAnsi,
- disableAnsi);
+ final PatternConverter pc = createConverter(converterId, currentLiteral, rules, options, disableAnsi,
+ noConsoleNoAnsi);
if (pc == null) {
StringBuilder msg;
[3/6] logging-log4j2 git commit: LOG4J2-1685 Update documentation
Posted by mi...@apache.org.
LOG4J2-1685 Update documentation
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/375eb14d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/375eb14d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/375eb14d
Branch: refs/heads/LOG4J2-1685
Commit: 375eb14debc739ff0272d4751f4323cfcd11b479
Parents: b35b135
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 13:47:16 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 13:47:16 2016 +0100
----------------------------------------------------------------------
.../logging/log4j/core/pattern/PatternParser.java | 15 +++++++++------
src/site/xdoc/manual/layouts.xml.vm | 5 +++++
2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/375eb14d/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index cadf0fb..42e8adb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -306,9 +306,9 @@ public final class PatternParser {
* @param formattingInfos
* list to receive field specifiers corresponding to pattern converters.
* @param disableAnsi
- * if all ansi color codes should be disabled.
+ * do not output ANSI escape codes
* @param noConsoleNoAnsi
- * TODO
+ * do not do not output ANSI escape codes if {@link System#console()}
* @param convertBackslashes if {@code true}, backslash characters are treated as escape characters and character
* sequences like "\" followed by "t" (backslash+t) are converted to special characters like '\t' (tab).
*/
@@ -479,7 +479,10 @@ public final class PatternParser {
* map of stock pattern converters keyed by format specifier.
* @param options
* converter options.
- * @param noConsoleNoAnsi TODO
+ * @param disableAnsi
+ * do not output ANSI escape codes
+ * @param noConsoleNoAnsi
+ * do not do not output ANSI escape codes if {@link System#console()}
* @return converter or null.
*/
private PatternConverter createConverter(final String converterId, final StringBuilder currentLiteral,
@@ -585,10 +588,10 @@ public final class PatternParser {
* list to receive parsed pattern converter.
* @param formattingInfos
* list to receive corresponding field specifier.
- * @param noConsoleNoAnsi
- * TODO
* @param disableAnsi
- * if all ansi color codes should be disabled.
+ * do not output ANSI escape codes
+ * @param noConsoleNoAnsi
+ * do not do not output ANSI escape codes if {@link System#console()}
* @param convertBackslashes if {@code true}, backslash characters are treated as escape characters and character
* sequences like "\" followed by "t" (backslash+t) are converted to special characters like '\t' (tab).
* @return position after format specifier sequence.
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/375eb14d/src/site/xdoc/manual/layouts.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/layouts.xml.vm b/src/site/xdoc/manual/layouts.xml.vm
index aa151ab..73517cb 100644
--- a/src/site/xdoc/manual/layouts.xml.vm
+++ b/src/site/xdoc/manual/layouts.xml.vm
@@ -485,6 +485,11 @@ WARN [main]: Message 2</pre>
<td>The optional footer string to include at the bottom of each log file.</td>
</tr>
<tr>
+ <td>disableAnsi</td>
+ <td>boolean</td>
+ <td>If <code>true</code> (default is false), do not output ANSI escape codes.</td>
+ </tr>
+ <tr>
<td>noConsoleNoAnsi</td>
<td>boolean</td>
<td>If <code>true</code> (default is false) and <code>System.console()</code> is null, do not output ANSI escape codes.</td>
[5/6] logging-log4j2 git commit: LOG4J2-1685 Avoid breaking binary
compatibility
Posted by mi...@apache.org.
LOG4J2-1685 Avoid breaking binary compatibility
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6630eae3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6630eae3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6630eae3
Branch: refs/heads/LOG4J2-1685
Commit: 6630eae39220c31cda185ef4d46538671e04fa64
Parents: 3baa703
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 14:16:59 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 14:16:59 2016 +0100
----------------------------------------------------------------------
.../core/layout/MarkerPatternSelector.java | 28 +++++++--
.../log4j/core/layout/PatternLayout.java | 63 ++++++++++++++++----
.../core/layout/ScriptPatternSelector.java | 30 ++++++++--
.../log4j/core/pattern/PatternParser.java | 25 ++++++++
.../log4j/perf/jmh/PatternLayoutBenchmark.java | 24 ++++----
.../jmh/PatternLayoutComparisonBenchmark.java | 13 ++--
.../perf/jmh/TextEncoderHelperBenchmark.java | 2 +-
7 files changed, 144 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
index 172df82..3ce69e1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
@@ -16,6 +16,10 @@
*/
package org.apache.logging.log4j.core.layout;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.core.LogEvent;
@@ -30,10 +34,6 @@ import org.apache.logging.log4j.core.pattern.PatternFormatter;
import org.apache.logging.log4j.core.pattern.PatternParser;
import org.apache.logging.log4j.status.StatusLogger;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* Selects the pattern to use based on the Marker in the LogEvent.
*/
@@ -50,8 +50,17 @@ public class MarkerPatternSelector implements PatternSelector {
private static Logger LOGGER = StatusLogger.getLogger();
-
+ /**
+ * @deprecated Use PluginFactory instead
+ */
+ @Deprecated
public MarkerPatternSelector(final PatternMatch[] properties, final String defaultPattern,
+ final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi,
+ final Configuration config) {
+ this(properties, defaultPattern, alwaysWriteExceptions, false, noConsoleNoAnsi, config);
+ }
+
+ private MarkerPatternSelector(final PatternMatch[] properties, final String defaultPattern,
final boolean alwaysWriteExceptions, final boolean disableAnsi,
final boolean noConsoleNoAnsi, final Configuration config) {
final PatternParser parser = PatternLayout.createPatternParser(config);
@@ -94,6 +103,15 @@ public class MarkerPatternSelector implements PatternSelector {
public static MarkerPatternSelector createSelector(@PluginElement("PatternMatch") final PatternMatch[] properties,
@PluginAttribute("defaultPattern") String defaultPattern,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
+ @PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
+ @PluginConfiguration final Configuration config) {
+ return createSelector(properties, defaultPattern, alwaysWriteExceptions, false, noConsoleNoAnsi, config);
+ }
+
+ @PluginFactory
+ public static MarkerPatternSelector createSelector(@PluginElement("PatternMatch") final PatternMatch[] properties,
+ @PluginAttribute("defaultPattern") String defaultPattern,
+ @PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
@PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
@PluginConfiguration final Configuration config) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 284222d..1e2e537 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -116,6 +116,12 @@ public final class PatternLayout extends AbstractStringLayout {
}
public static Serializer createSerializer(final Configuration configuration, final RegexReplacement replace,
+ final String pattern, final String defaultPattern, final PatternSelector patternSelector,
+ final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi) {
+ return createSerializer(configuration, replace, pattern, defaultPattern, patternSelector, alwaysWriteExceptions, false, noConsoleNoAnsi);
+ }
+
+ public static Serializer createSerializer(final Configuration configuration, final RegexReplacement replace,
final String pattern, final String defaultPattern, final PatternSelector patternSelector,
final boolean alwaysWriteExceptions, boolean disableAnsi, final boolean noConsoleNoAnsi) {
if (Strings.isEmpty(pattern) && Strings.isEmpty(defaultPattern)) {
@@ -236,13 +242,11 @@ public final class PatternLayout extends AbstractStringLayout {
* The character set. The platform default is used if not specified.
* @param alwaysWriteExceptions
* If {@code "true"} (default) exceptions are always written even if the pattern contains no exception tokens.
- * @param disableAnsi
- * If {@code "true"} (default is false), do not output ANSI escape codes
* @param noConsoleNoAnsi
* If {@code "true"} (default is false) and {@link System#console()} is null, do not output ANSI escape codes
- * @param headerPattern
+ * @param header
* The footer to place at the top of the document, once.
- * @param footerPattern
+ * @param footer
* The footer to place at the bottom of the document, once.
* @return The PatternLayout.
*/
@@ -255,10 +259,9 @@ public final class PatternLayout extends AbstractStringLayout {
// LOG4J2-783 use platform default by default, so do not specify defaultString for charset
@PluginAttribute(value = "charset") final Charset charset,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
- @PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
- @PluginAttribute("header") final String headerPattern,
- @PluginAttribute("footer") final String footerPattern) {
+ @PluginAttribute("header") final String header,
+ @PluginAttribute("footer") final String footer) {
return newBuilder()
.withPattern(pattern)
.withPatternSelector(patternSelector)
@@ -266,10 +269,9 @@ public final class PatternLayout extends AbstractStringLayout {
.withRegexReplacement(replace)
.withCharset(charset)
.withAlwaysWriteExceptions(alwaysWriteExceptions)
- .withDisableAnsi(disableAnsi)
.withNoConsoleNoAnsi(noConsoleNoAnsi)
- .withHeader(headerPattern)
- .withFooter(footerPattern)
+ .withHeader(header)
+ .withFooter(footer)
.build();
}
@@ -445,28 +447,47 @@ public final class PatternLayout extends AbstractStringLayout {
private Builder() {
}
- // TODO: move javadocs from PluginFactory to here
+ /**
+ * @param pattern
+ * The pattern. If not specified, defaults to DEFAULT_CONVERSION_PATTERN.
+ */
public Builder withPattern(final String pattern) {
this.pattern = pattern;
return this;
}
+ /**
+ * @param patternSelector
+ * Allows different patterns to be used based on some selection criteria.
+ */
public Builder withPatternSelector(final PatternSelector patternSelector) {
this.patternSelector = patternSelector;
return this;
}
+ /**
+ * @param configuration
+ * The Configuration. Some Converters require access to the Interpolator.
+ */
public Builder withConfiguration(final Configuration configuration) {
this.configuration = configuration;
return this;
}
+ /**
+ * @param regexReplacement
+ * A Regex replacement
+ */
public Builder withRegexReplacement(final RegexReplacement regexReplacement) {
this.regexReplacement = regexReplacement;
return this;
}
+ /**
+ * @param charset
+ * The character set. The platform default is used if not specified.
+ */
public Builder withCharset(final Charset charset) {
// LOG4J2-783 if null, use platform default by default
if (charset != null) {
@@ -475,26 +496,46 @@ public final class PatternLayout extends AbstractStringLayout {
return this;
}
+ /**
+ * @param alwaysWriteExceptions
+ * If {@code "true"} (default) exceptions are always written even if the pattern contains no exception tokens.
+ */
public Builder withAlwaysWriteExceptions(final boolean alwaysWriteExceptions) {
this.alwaysWriteExceptions = alwaysWriteExceptions;
return this;
}
+ /**
+ * @param disableAnsi
+ * If {@code "true"} (default is false), do not output ANSI escape codes
+ */
public Builder withDisableAnsi(final boolean disableAnsi) {
this.disableAnsi = disableAnsi;
return this;
}
+ /**
+ * @param noConsoleNoAnsi
+ * If {@code "true"} (default is false) and {@link System#console()} is null, do not output ANSI escape codes
+ */
public Builder withNoConsoleNoAnsi(final boolean noConsoleNoAnsi) {
this.noConsoleNoAnsi = noConsoleNoAnsi;
return this;
}
+ /**
+ * @param header
+ * The footer to place at the top of the document, once.
+ */
public Builder withHeader(final String header) {
this.header = header;
return this;
}
+ /**
+ * @param footer
+ * The footer to place at the bottom of the document, once.
+ */
public Builder withFooter(final String footer) {
this.footer = footer;
return this;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
index 48dba2e..e6772fd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
@@ -16,6 +16,11 @@
*/
package org.apache.logging.log4j.core.layout;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.script.SimpleBindings;
+
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Configuration;
@@ -31,11 +36,6 @@ import org.apache.logging.log4j.core.script.AbstractScript;
import org.apache.logging.log4j.core.script.ScriptRef;
import org.apache.logging.log4j.status.StatusLogger;
-import javax.script.SimpleBindings;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* Selects the pattern to use based on the Marker in the LogEvent.
*/
@@ -55,7 +55,17 @@ public class ScriptPatternSelector implements PatternSelector {
private final Configuration configuration;
+ /**
+ * @deprecated Use PluginFactory instead
+ */
+ @Deprecated
public ScriptPatternSelector(final AbstractScript script, final PatternMatch[] properties, final String defaultPattern,
+ final boolean alwaysWriteExceptions, final boolean noConsoleNoAnsi,
+ final Configuration config) {
+ this(script, properties, defaultPattern, alwaysWriteExceptions, false, noConsoleNoAnsi, config);
+ }
+
+ private ScriptPatternSelector(final AbstractScript script, final PatternMatch[] properties, final String defaultPattern,
final boolean alwaysWriteExceptions, final boolean disablAnsi,
final boolean noConsoleNoAnsi, final Configuration config) {
this.script = script;
@@ -103,6 +113,16 @@ public class ScriptPatternSelector implements PatternSelector {
@PluginElement("PatternMatch") final PatternMatch[] properties,
@PluginAttribute("defaultPattern") String defaultPattern,
@PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
+ @PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
+ @PluginConfiguration final Configuration config) {
+ return createSelector(script, properties, defaultPattern, alwaysWriteExceptions, false, noConsoleNoAnsi, config);
+ }
+
+ @PluginFactory
+ public static ScriptPatternSelector createSelector(@PluginElement("Script") final AbstractScript script,
+ @PluginElement("PatternMatch") final PatternMatch[] properties,
+ @PluginAttribute("defaultPattern") String defaultPattern,
+ @PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
@PluginAttribute(value = "disableAnsi", defaultBoolean = false) final boolean disableAnsi,
@PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
@PluginConfiguration final Configuration config) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index 3d14830..6881550 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -164,6 +164,11 @@ public final class PatternParser {
}
public List<PatternFormatter> parse(final String pattern, final boolean alwaysWriteExceptions,
+ final boolean noConsoleNoAnsi) {
+ return parse(pattern, alwaysWriteExceptions, false, noConsoleNoAnsi);
+ }
+
+ public List<PatternFormatter> parse(final String pattern, final boolean alwaysWriteExceptions,
boolean disableAnsi, final boolean noConsoleNoAnsi) {
final List<PatternFormatter> list = new ArrayList<>();
final List<PatternConverter> converters = new ArrayList<>();
@@ -305,6 +310,26 @@ public final class PatternParser {
* list to receive pattern converters.
* @param formattingInfos
* list to receive field specifiers corresponding to pattern converters.
+ * @param noConsoleNoAnsi
+ * do not do not output ANSI escape codes if {@link System#console()}
+ * @param convertBackslashes if {@code true}, backslash characters are treated as escape characters and character
+ * sequences like "\" followed by "t" (backslash+t) are converted to special characters like '\t' (tab).
+ */
+ public void parse(final String pattern, final List<PatternConverter> patternConverters,
+ final List<FormattingInfo> formattingInfos, final boolean noConsoleNoAnsi,
+ final boolean convertBackslashes) {
+ parse(pattern, patternConverters, formattingInfos, false, noConsoleNoAnsi, convertBackslashes);
+ }
+
+ /**
+ * Parse a format specifier.
+ *
+ * @param pattern
+ * pattern to parse.
+ * @param patternConverters
+ * list to receive pattern converters.
+ * @param formattingInfos
+ * list to receive field specifiers corresponding to pattern converters.
* @param disableAnsi
* do not output ANSI escape codes
* @param noConsoleNoAnsi
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
index c7b5948..8d39732 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutBenchmark.java
@@ -60,18 +60,18 @@ public class PatternLayoutBenchmark {
private static final String DEFAULT_ENCODING = CHARSET_DEFAULT.name();
private static final String STRING_SHIFT_JIS = "SHIFT_JIS";
private static final Charset CHARSET_SHIFT_JIS = Charset.forName(STRING_SHIFT_JIS);
- private final PatternLayout PATTERN_M = PatternLayout.createLayout("%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_SPACE = PatternLayout.createLayout(" ", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_C = PatternLayout.createLayout("%c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_D = PatternLayout.createLayout("%d %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_C = PatternLayout.createLayout("%c%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_D = PatternLayout.createLayout("%d%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_D_NOSPACE = PatternLayout.createLayout("%d%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_C_NOSPACE = PatternLayout.createLayout("%c%m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_EX = PatternLayout.createLayout("%m %ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_D_EX = PatternLayout.createLayout("%d %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
- private final PatternLayout PATTERN_M_C_D_EX = PatternLayout.createLayout("%d %c %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M = PatternLayout.createLayout("%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_SPACE = PatternLayout.createLayout(" ", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_C = PatternLayout.createLayout("%c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_D = PatternLayout.createLayout("%d %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_C = PatternLayout.createLayout("%c%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_D = PatternLayout.createLayout("%d%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_D_NOSPACE = PatternLayout.createLayout("%d%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_C_NOSPACE = PatternLayout.createLayout("%c%m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_EX = PatternLayout.createLayout("%m %ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_D_EX = PatternLayout.createLayout("%d %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
+ private final PatternLayout PATTERN_M_C_D_EX = PatternLayout.createLayout("%d %c %m%ex%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
private static LogEvent createLogEvent() {
final Marker marker = null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
index ab9cd97..88d670a 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
@@ -22,6 +22,11 @@ import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Map;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.classic.spi.LoggingEvent;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.ThreadContext.ContextStack;
@@ -35,12 +40,6 @@ import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
-import ch.qos.logback.classic.Logger;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.classic.spi.LoggingEvent;
-
/**
* Compares Log4j2 with Logback PatternLayout performance.
*/
@@ -60,7 +59,7 @@ public class PatternLayoutComparisonBenchmark {
private static final Charset CHARSET_DEFAULT = Charset.defaultCharset();
private static final String LOG4JPATTERN = "%d %5p [%t] %c{1} %X{transactionId} - %m%n";
private final PatternLayout LOG4J2_PATTERN_LAYOUT = PatternLayout.createLayout(LOG4JPATTERN, null,
- null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ null, null, CHARSET_DEFAULT, false, true, null, null);
private static LogEvent createLog4j2Event() {
final Marker marker = null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6630eae3/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
index d619399..bf67c9d 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TextEncoderHelperBenchmark.java
@@ -61,7 +61,7 @@ public class TextEncoderHelperBenchmark {
final static LogEvent EVENT = createLogEvent();
private static final Charset CHARSET_DEFAULT = Charset.defaultCharset();
- private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, true, null, null);
+ private final PatternLayout PATTERN_M_C_D = PatternLayout.createLayout("%d %c %m%n", null, null, null, CHARSET_DEFAULT, false, true, null, null);
private final Destination destination = new Destination();
class Destination implements ByteBufferDestination {
[6/6] logging-log4j2 git commit: LOG4J2-1685 Revert irrelevant changes
Posted by mi...@apache.org.
LOG4J2-1685 Revert irrelevant changes
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/028ae4b4
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/028ae4b4
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/028ae4b4
Branch: refs/heads/LOG4J2-1685
Commit: 028ae4b457af219447dc97b2ac4cf7f64f9d0724
Parents: 6630eae
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 14:23:25 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 14:23:25 2016 +0100
----------------------------------------------------------------------
.../log4j/perf/jmh/PatternLayoutComparisonBenchmark.java | 11 ++++++-----
.../log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java | 2 +-
2 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/028ae4b4/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
index 88d670a..0bcf3da 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/PatternLayoutComparisonBenchmark.java
@@ -22,11 +22,6 @@ import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Map;
-import ch.qos.logback.classic.Logger;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.classic.spi.LoggingEvent;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.ThreadContext.ContextStack;
@@ -40,6 +35,12 @@ import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.classic.spi.LoggingEvent;
+
/**
* Compares Log4j2 with Logback PatternLayout performance.
*/
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/028ae4b4/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
index 4aeeb90..831c4f8 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadLocalVsPoolBenchmark.java
@@ -80,7 +80,7 @@ public class ThreadLocalVsPoolBenchmark {
private static PatternFormatter[] createFormatters() {
final Configuration config = new DefaultConfiguration();
final PatternParser parser = new PatternParser(config, "Converter", LogEventPatternConverter.class);
- final List<PatternFormatter> result = parser.parse(LOG4JPATTERN, false, false, true);
+ final List<PatternFormatter> result = parser.parse(LOG4JPATTERN, false, true);
return result.toArray(new PatternFormatter[result.size()]);
}
[2/6] logging-log4j2 git commit: LOG4J2-1685 Update changelog
Posted by mi...@apache.org.
LOG4J2-1685 Update changelog
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b35b1359
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b35b1359
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b35b1359
Branch: refs/heads/LOG4J2-1685
Commit: b35b1359b8195b8e56046f3388ef79dd7e01e209
Parents: 42f8f08
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 13:20:08 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 13:20:08 2016 +0100
----------------------------------------------------------------------
src/changes/changes.xml | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b35b1359/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ec8d7f1..bacf8f4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="2.8" date="2016-MM-DD" description="GA Release 2.8">
+ <action issue="LOG4J2-1685" dev="mikes" type="fix" due-to="Raman Gupta">
+ Option 'disableAnsi' in PatternLayout to unconditionally disable ANSI escape codes.
+ </action>
<action issue="LOG4J2-1679" dev="rpopma" type="fix">
(GC) Avoid allocating temporary objects in StructuredDataFilter.
</action>