On Tue, Oct 24, 2017 at 5:47 PM, Remko Popma <[email protected]> wrote:
> Mikael, I also don’t like the negative properties. > > Gary, we could remove the `log4j.skipJansi` system property altogether and > instead have an explicit ConsoleAppender config attribute like `loadJansi` > (or something). > This still feels weird. Are we going to end up with loadJacksonJson, loadJacksonYaml, loadThis, and loadThat? Would be possible to instead say something like ignoreDependencyExceptions? Gary > > > Note by the way that `disableAnsi` is for all ANSI escape codes and is not > directly related to the Jansi library. > > > > > On Oct 25, 2017, at 4:40, Mikael Ståldal <[email protected]> wrote: > > > > If we are going to rename it, I would like to invert it to > "log4j2.enableJansi" (default false). I think negative properties with true > default are confusing. > > > > > >> On 2017-10-24 15:04, Remko Popma wrote: > >> You mean let’s replace all occurrences of `log4j.skipJansi` with > `log4j2.skipJansi`, in both code and documentation? > >>> On Oct 24, 2017, at 14:03, Matt Sicker <[email protected]> wrote: > >>> > >>> Can you use the new system property naming scheme? This would be > >>> log4j2.skipJansi. That property would work regardless with the new > system > >>> properties parser thing, though the documentation should be more > consistent > >>> now. > >>> > >>>> On 23 October 2017 at 22:14, <[email protected]> wrote: > >>>> > >>>> Repository: logging-log4j2 > >>>> Updated Branches: > >>>> refs/heads/master 00823bd95 -> 73efe3dcf > >>>> > >>>> > >>>> LOG4J2-2087 Jansi now needs to be enabled explicitly (by setting > system > >>>> property `log4j.skipJansi` to `false`). To avoid causing problems for > web > >>>> applications, Log4j will no longer automatically try to load Jansi > without > >>>> explicit configuration. > >>>> > >>>> > >>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo > >>>> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/ > >>>> commit/73efe3dc > >>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ > 73efe3dc > >>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ > 73efe3dc > >>>> > >>>> Branch: refs/heads/master > >>>> Commit: 73efe3dcf6787e66177a6485271362c5f989e014 > >>>> Parents: 00823bd > >>>> Author: rpopma <[email protected]> > >>>> Authored: Tue Oct 24 12:13:56 2017 +0900 > >>>> Committer: rpopma <[email protected]> > >>>> Committed: Tue Oct 24 12:13:56 2017 +0900 > >>>> > >>>> ------------------------------------------------------------ > ---------- > >>>> .../log4j/core/appender/ConsoleAppender.java | 10 ++-- > >>>> .../log4j/core/layout/PatternLayout.java | 16 +++++-- > >>>> .../ConsoleAppenderAnsiMessagesMain.java | 3 +- > >>>> .../ConsoleAppenderAnsiStyleJira180Main.java | 3 +- > >>>> .../ConsoleAppenderAnsiStyleJira272Main.java | 1 + > >>>> .../ConsoleAppenderAnsiStyleJira319Main.java | 3 +- > >>>> .../ConsoleAppenderAnsiStyleLayoutMain.java | 3 +- > >>>> .../ConsoleAppenderAnsiStyleNameLayoutMain.java | 1 + > >>>> ...nsoleAppenderHighlightLayoutDefaultMain.java | 1 + > >>>> .../ConsoleAppenderHighlightLayoutMain.java | 1 + > >>>> .../ConsoleAppenderJAnsiMessageMain.java | 7 +-- > >>>> .../ConsoleAppenderJAnsiXExceptionMain.java | 7 +-- > >>>> .../ConsoleAppenderNoAnsiStyleLayoutMain.java | 2 +- > >>>> .../log4j/core/pattern/StyleConverterTest.java | 6 +++ > >>>> src/changes/changes.xml | 3 ++ > >>>> src/site/xdoc/manual/layouts.xml.vm | 48 > ++++++++++++-------- > >>>> 16 files changed, 76 insertions(+), 39 deletions(-) > >>>> ------------------------------------------------------------ > ---------- > >>>> > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/main/java/org/apache/logging/log4j/ > >>>> core/appender/ConsoleAppender.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > appender/ConsoleAppender.java > >>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppender.java > >>>> index bd2dc16..90d16e6 100644 > >>>> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppender.java > >>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppender.java > >>>> @@ -67,7 +67,7 @@ public final class ConsoleAppender extends > >>>> AbstractOutputStreamAppender<OutputSt > >>>> * Enumeration of console destinations. > >>>> */ > >>>> public enum Target { > >>>> - > >>>> + > >>>> /** Standard output. */ > >>>> SYSTEM_OUT { > >>>> @Override > >>>> @@ -76,7 +76,7 @@ public final class ConsoleAppender extends > >>>> AbstractOutputStreamAppender<OutputSt > >>>> return getCharset("sun.stdout.encoding", > >>>> Charset.defaultCharset()); > >>>> } > >>>> }, > >>>> - > >>>> + > >>>> /** Standard error output. */ > >>>> SYSTEM_ERR { > >>>> @Override > >>>> @@ -85,9 +85,9 @@ public final class ConsoleAppender extends > >>>> AbstractOutputStreamAppender<OutputSt > >>>> return getCharset("sun.stderr.encoding", > >>>> Charset.defaultCharset()); > >>>> } > >>>> }; > >>>> - > >>>> + > >>>> public abstract Charset getDefaultCharset(); > >>>> - > >>>> + > >>>> protected Charset getCharset(final String property, Charset > >>>> defaultCharset) { > >>>> return new PropertiesUtil(PropertiesUtil. > >>>> getSystemProperties()).getCharsetProperty(property, defaultCharset); > >>>> } > >>>> @@ -260,7 +260,7 @@ public final class ConsoleAppender extends > >>>> AbstractOutputStreamAppender<OutputSt > >>>> throw new IllegalStateException("Unsupported default > >>>> encoding " + enc, ex); > >>>> } > >>>> final PropertiesUtil propsUtil = > PropertiesUtil.getProperties(); > >>>> - if (!propsUtil.isOsWindows() || > propsUtil.getBooleanProperty("log4j.skipJansi") > >>>> || direct) { > >>>> + if (!propsUtil.isOsWindows() || > propsUtil.getBooleanProperty("log4j.skipJansi", > >>>> true) || direct) { > >>>> return outputStream; > >>>> } > >>>> try { > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/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 e4440eb..a6b3a88 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 > >>>> @@ -38,6 +38,7 @@ import org.apache.logging.log4j.core.pattern. > >>>> LogEventPatternConverter; > >>>> import org.apache.logging.log4j.core.pattern.PatternFormatter; > >>>> import org.apache.logging.log4j.core.pattern.PatternParser; > >>>> import org.apache.logging.log4j.core.pattern.RegexReplacement; > >>>> +import org.apache.logging.log4j.util.PropertiesUtil; > >>>> import org.apache.logging.log4j.util.Strings; > >>>> > >>>> /** > >>>> @@ -143,7 +144,7 @@ public final class PatternLayout extends > >>>> AbstractStringLayout { > >>>> > >>>> /** > >>>> * Deprecated, use {@link #newSerializerBuilder()} instead. > >>>> - * > >>>> + * > >>>> * @param configuration > >>>> * @param replace > >>>> * @param pattern > >>>> @@ -427,7 +428,7 @@ public final class PatternLayout extends > >>>> AbstractStringLayout { > >>>> } > >>>> > >>>> private static class PatternSelectorSerializer implements > Serializer, > >>>> Serializer2 { > >>>> - > >>>> + > >>>> private final PatternSelector patternSelector; > >>>> private final RegexReplacement replace; > >>>> > >>>> @@ -535,7 +536,7 @@ public final class PatternLayout extends > >>>> AbstractStringLayout { > >>>> private boolean alwaysWriteExceptions = true; > >>>> > >>>> @PluginBuilderAttribute > >>>> - private boolean disableAnsi; > >>>> + private boolean disableAnsi = !useAnsiEscapeCodes(); > >>>> > >>>> @PluginBuilderAttribute > >>>> private boolean noConsoleNoAnsi; > >>>> @@ -549,6 +550,12 @@ public final class PatternLayout extends > >>>> AbstractStringLayout { > >>>> private Builder() { > >>>> } > >>>> > >>>> + private boolean useAnsiEscapeCodes() { > >>>> + PropertiesUtil propertiesUtil = > PropertiesUtil.getProperties() > >>>> ; > >>>> + boolean isPlatformSupportsAnsi = > >>>> !propertiesUtil.isOsWindows(); > >>>> + boolean isJansiRequested = !propertiesUtil. > >>>> getBooleanProperty("log4j.skipJansi", true); > >>>> + return isPlatformSupportsAnsi || isJansiRequested; > >>>> + } > >>>> > >>>> /** > >>>> * @param pattern > >>>> @@ -609,7 +616,8 @@ public final class PatternLayout extends > >>>> AbstractStringLayout { > >>>> > >>>> /** > >>>> * @param disableAnsi > >>>> - * If {@code "true"} (default is false), do not output > >>>> ANSI escape codes > >>>> + * If {@code "true"} (default is value of system > property > >>>> `log4j.skipJansi`, or `true` if undefined), > >>>> + * do not output ANSI escape codes > >>>> */ > >>>> public Builder withDisableAnsi(final boolean disableAnsi) { > >>>> this.disableAnsi = disableAnsi; > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiMessagesMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiMessagesMain.java > b/log4j-core/src/test/java/ > >>>> org/apache/logging/log4j/core/appender/ConsoleAppenderAnsiMessagesMai > >>>> n.java > >>>> index f8ea731..f74ab1b 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiMessagesMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiMessagesMain.java > >>>> @@ -29,7 +29,7 @@ import org.apache.logging.log4j.core. > >>>> config.Configurator; > >>>> * <p> > >>>> * Running from a Windows command line from the root of the project: > >>>> * </p> > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%HOME%\.m2\repository\ > >>>> org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderAnsiMessagesMai > n > >>>> log4j-core/target/test-classes/log4j2-console.xml > >>>> * </pre> > >>>> @@ -39,6 +39,7 @@ public class ConsoleAppenderAnsiMessagesMain { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderAnsiMessagesMain.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> "target/test-classes/log4j2-console.xml")) { > >>>> LOG.fatal("\u001b[1;35mFatal message.\u001b[0m"); > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiStyleJira180Main.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiStyleJira180Main.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderAnsiStyleJira180Main.java > >>>> index 5a7fcee..5bb815d 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira180Main.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira180Main.java > >>>> @@ -27,7 +27,7 @@ import org.apache.logging.log4j.core. > >>>> config.Configurator; > >>>> * <p> > >>>> * Running from a Windows command line from the root of the project: > >>>> * </p> > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%HOME%\.m2\repository\ > >>>> org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderAnsiStyleJira18 > 0Main > >>>> log4j-core/target/test-classes/log4j2-180.xml > >>>> * </pre> > >>>> @@ -37,6 +37,7 @@ public class ConsoleAppenderAnsiStyleJira180Main { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderAnsiStyleJira180Main.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args.length == 0 ? > >>>> "target/test-classes/log4j2-180.xml" : args[0]; > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiStyleJira272Main.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiStyleJira272Main.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderAnsiStyleJira272Main.java > >>>> index 9889f46..8c8aaa9 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira272Main.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira272Main.java > >>>> @@ -36,6 +36,7 @@ public class ConsoleAppenderAnsiStyleJira272Main { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderAnsiStyleJira272Main.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args.length == 0 ? > >>>> "target/test-classes/log4j2-272.xml" : args[0]; > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), config)) { > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiStyleJira319Main.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiStyleJira319Main.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderAnsiStyleJira319Main.java > >>>> index 54ad06c..9d62101 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira319Main.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleJira319Main.java > >>>> @@ -27,7 +27,7 @@ import org.apache.logging.log4j.core. > >>>> config.Configurator; > >>>> * <p> > >>>> * Running from a Windows command line from the root of the project: > >>>> * </p> > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%HOME%\.m2\repository\ > >>>> org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderAnsiStyleJira31 > 9Main > >>>> log4j-core/target/test-classes/log4j2-319.xml > >>>> * </pre> > >>>> @@ -37,6 +37,7 @@ public class ConsoleAppenderAnsiStyleJira319Main { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderAnsiStyleJira319Main.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args.length == 0 ? > >>>> "target/test-classes/log4j2-319.xml" : args[0]; > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiStyleLayoutMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiStyleLayoutMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderAnsiStyleLayoutMain.java > >>>> index 5e3bb0f..758b13e 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleLayoutMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleLayoutMain.java > >>>> @@ -38,7 +38,7 @@ import org.junit.Test; > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%HOME%\.m2\repository\ > >>>> org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderAnsiStyleLayout > Main > >>>> log4j-core/target/test-classes/log4j2-console-style-ansi.xml > >>>> * </pre> > >>>> - * > >>>> + * > >>>> */ > >>>> public class ConsoleAppenderAnsiStyleLayoutMain { > >>>> > >>>> @@ -55,6 +55,7 @@ public class ConsoleAppenderAnsiStyleLayoutMain { > >>>> } > >>>> > >>>> public void test(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args == null || args.length == 0 ? > >>>> "target/test-classes/log4j2-console-style-ansi.xml" > >>>> : args[0]; > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderAnsiStyleNameLayoutMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderAnsiStyleNameLayoutMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderAnsiStyleNameLayoutMain.java > >>>> index 4a2b26a..09f111b 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleNameLayoutMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderAnsiStyleNameLayoutMain.java > >>>> @@ -32,6 +32,7 @@ public class ConsoleAppenderAnsiStyleNameLayoutMain > { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderAnsiStyleNameLayoutMain.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> "target/test-classes/log4j2- > console-style-name-ansi.xml")) > >>>> { > >>>> LOG.fatal("Fatal message."); > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderHighlightLayoutDefaultMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderHighlightLayoutDefaultMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderHighlightLayoutDefaultMain.java > >>>> index 4c3339d..16afa9b 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderHighlightLayoutDefaultMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderHighlightLayoutDefaultMain.java > >>>> @@ -32,6 +32,7 @@ public class ConsoleAppenderHighlightLayoutDefaultMain > { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderHighlightLayoutDefaultMain.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> "target/test-classes/log4j2- > >>>> console-highlight-default.xml")) { > >>>> LOG.fatal("Fatal message."); > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderHighlightLayoutMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderHighlightLayoutMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderHighlightLayoutMain.java > >>>> index 0ca7e8d..34c4355 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderHighlightLayoutMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderHighlightLayoutMain.java > >>>> @@ -32,6 +32,7 @@ public class ConsoleAppenderHighlightLayoutMain { > >>>> private static final Logger LOG = LogManager.getLogger( > >>>> ConsoleAppenderHighlightLayoutMain.class); > >>>> > >>>> public static void main(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> try (final LoggerContext ctx = Configurator.initialize( > >>>> ConsoleAppenderAnsiMessagesMain.class.getName(), > >>>> "target/test-classes/log4j2-console-highlight.xml")) > { > >>>> LOG.fatal("Fatal message."); > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderJAnsiMessageMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderJAnsiMessageMain.java > b/log4j-core/src/test/java/ > >>>> org/apache/logging/log4j/core/appender/ConsoleAppenderJAnsiMessageMai > >>>> n.java > >>>> index 6e54505..f800806 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderJAnsiMessageMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderJAnsiMessageMain.java > >>>> @@ -40,13 +40,13 @@ import org.junit.experimental. > categories.Category; > >>>> * <pre> > >>>> * mvn -Dtest=org.apache.logging.log4j.core.appender. > >>>> ConsoleAppenderJAnsiMessageMain test > >>>> * </pre> > >>>> - * > >>>> + * > >>>> * or, on Windows: > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%USERPROFILE%\.m2\ > >>>> repository\org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderJAnsiMessageMai > n > >>>> log4j-core/src/test/resources/log4j2-console-msg-ansi.xml > >>>> * </pre> > >>>> - * > >>>> + * > >>>> */ > >>>> @Category(Layouts.Jansi.class) > >>>> public class ConsoleAppenderJAnsiMessageMain { > >>>> @@ -64,6 +64,7 @@ public class ConsoleAppenderJAnsiMessageMain { > >>>> } > >>>> > >>>> public void test(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args == null || args.length == 0 ? > >>>> "target/test-classes/log4j2-console-msg-ansi.xml" > >>>> : args[0]; > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderJAnsiXExceptionMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderJAnsiXExceptionMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderJAnsiXExceptionMain.java > >>>> index 7780a1d..34901ff 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderJAnsiXExceptionMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderJAnsiXExceptionMain.java > >>>> @@ -37,13 +37,13 @@ import org.junit.experimental. > categories.Category; > >>>> * <pre> > >>>> * mvn -Dtest=org.apache.logging.log4j.core.appender. > >>>> ConsoleAppenderJAnsiXExceptionMain test > >>>> * </pre> > >>>> - * > >>>> + * > >>>> * or, on Windows: > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%USERPROFILE%\.m2\ > >>>> repository\org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderJAnsiXException > Main > >>>> log4j-core/src/test/resources/log4j2-console-xex-ansi.xml > >>>> * </pre> > >>>> - * > >>>> + * > >>>> */ > >>>> @Category(Layouts.Jansi.class) > >>>> public class ConsoleAppenderJAnsiXExceptionMain { > >>>> @@ -61,6 +61,7 @@ public class ConsoleAppenderJAnsiXExceptionMain { > >>>> } > >>>> > >>>> public void test(final String[] args) { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> // System.out.println(System.getProperty("java.class.path")); > >>>> final String config = args == null || args.length == 0 ? > >>>> "target/test-classes/log4j2-console-xex-ansi.xml" > >>>> : args[0]; > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/ > >>>> ConsoleAppenderNoAnsiStyleLayoutMain.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> appender/ConsoleAppenderNoAnsiStyleLayoutMain.java > >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > >>>> ConsoleAppenderNoAnsiStyleLayoutMain.java > >>>> index bb08de4..3bc22d1 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderNoAnsiStyleLayoutMain.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/ > >>>> ConsoleAppenderNoAnsiStyleLayoutMain.java > >>>> @@ -29,7 +29,7 @@ import org.apache.logging.log4j.core. > >>>> config.Configurator; > >>>> * <p> > >>>> * Running from a Windows command line from the root of the project: > >>>> * </p> > >>>> - * > >>>> + * > >>>> * <pre> > >>>> * java -classpath log4j-core\target\test-classes;log4j-core\target\ > >>>> classes;log4j-api\target\classes;%HOME%\.m2\repository\ > >>>> org\fusesource\jansi\jansi\1.14\jansi-1.14.jar; > >>>> org.apache.logging.log4j.core.appender.ConsoleAppenderNoAnsiStyleLayo > utMain > >>>> log4j-core/target/test-classes/log4j2-console-style-ansi.xml > >>>> * </pre> > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/log4j-core/src/test/java/org/apache/logging/log4j/ > core/pattern/ > >>>> StyleConverterTest.java > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> pattern/StyleConverterTest.java b/log4j-core/src/test/java/ > >>>> org/apache/logging/log4j/core/pattern/StyleConverterTest.java > >>>> index ea62885..248fdc3 100644 > >>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> pattern/StyleConverterTest.java > >>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > >>>> pattern/StyleConverterTest.java > >>>> @@ -24,6 +24,7 @@ import org.apache.logging.log4j.test. > >>>> appender.ListAppender; > >>>> import org.apache.logging.log4j.util.Strings; > >>>> import org.junit.Assert; > >>>> import org.junit.Before; > >>>> +import org.junit.BeforeClass; > >>>> import org.junit.Rule; > >>>> import org.junit.Test; > >>>> > >>>> @@ -38,6 +39,11 @@ public class StyleConverterTest { > >>>> "\u001B[1;31mERROR\u001B[m \u001B[1;36mLoggerTest\u001B[m > >>>> o.a.l.l.c.p.StyleConverterTest org.apache.logging.log4j.core. > >>>> pattern.StyleConverterTest" > >>>> + Strings.LINE_SEPARATOR; > >>>> > >>>> + @BeforeClass > >>>> + public static void beforeClass() { > >>>> + System.setProperty("log4j.skipJansi", "false"); // > LOG4J2-2087: > >>>> explicitly enable > >>>> + } > >>>> + > >>>> @Rule > >>>> public LoggerContextRule init = new LoggerContextRule("log4j- > >>>> style.xml"); > >>>> > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/src/changes/changes.xml > >>>> ------------------------------------------------------------ > ---------- > >>>> diff --git a/src/changes/changes.xml b/src/changes/changes.xml > >>>> index b8d560e..9dbdd75 100644 > >>>> --- a/src/changes/changes.xml > >>>> +++ b/src/changes/changes.xml > >>>> @@ -31,6 +31,9 @@ > >>>> - "remove" - Removed > >>>> --> > >>>> <release version="2.10.0" date="2017-MM-DD" description="GA > Release > >>>> 2.10.0"> > >>>> + <action issue="LOG4J2-2087" dev="rpopma" type="fix" > due-to="Andy > >>>> Gumbrecht"> > >>>> + Jansi now needs to be enabled explicitly (by setting system > >>>> property `log4j.skipJansi` to `false`). To avoid causing problems for > web > >>>> applications, Log4j will no longer automatically try to load Jansi > without > >>>> explicit configuration. > >>>> + </action> > >>>> <action issue="LOG4J2-2060" dev="rpopma" type="fix"> > >>>> AbstractDatabaseManager should make a copy of LogEvents before > >>>> holding references to them: AsyncLogger log events are mutable. > >>>> </action> > >>>> > >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > >>>> 73efe3dc/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 d878a2e..1e8cfb3 100644 > >>>> --- a/src/site/xdoc/manual/layouts.xml.vm > >>>> +++ b/src/site/xdoc/manual/layouts.xml.vm > >>>> @@ -912,17 +912,17 @@ WARN [main]: Message 2</pre> > >>>> <p> > >>>> Specifying <code>%throwable{none}</code> or > >>>> <code>%throwable{0}</code> suppresses output of the exception. > >>>> </p> > >>>> - <p> > >>>> - Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> + <p> > >>>> + Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> suppress matching stack frames from stack traces. > >>>> </p> > >>>> <p> > >>>> - Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> - <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> + Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> + <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> which is operating system dependent. > >>>> </p> > >>>> <p> > >>>> - Use <code>ex{suffix(<i>pattern</i>)</code> to add > the > >>>> output of <i>pattern</i> to the output only > >>>> + Use <code>ex{suffix(<i>pattern</i>)</code> to add > the > >>>> output of <i>pattern</i> to the output only > >>>> when there is a throwable to print. > >>>> </p> > >>>> </td> > >>>> @@ -944,6 +944,7 @@ WARN [main]: Message 2</pre> > >>>> </td> > >>>> <td> > >>>> <p>Adds ANSI colors to the result of the enclosed > pattern > >>>> based on the current event's logging level. > >>>> + (See Jansi <a href="#enable-jansi"> > configuration</a>.) > >>>> </p> > >>>> <p>The default colors for each level are: > >>>> <table> > >>>> @@ -1164,7 +1165,8 @@ WARN [main]: Message 2</pre> > >>>> </p> > >>>> <!-- Copied and tweaked from Javadoc for > >>>> org.apache.logging.log4j.core.pattern.JAnsiMessageRenderer --> > >>>> <p> > >>>> - Add <code>{ansi}</code> to render messages with > ANSI > >>>> escape codes (requires JAnsi.) > >>>> + Add <code>{ansi}</code> to render messages with > ANSI > >>>> escape codes (requires JAnsi, > >>>> + see <a href="#enable-jansi">configuration</a>.) > >>>> </p> > >>>> <p> > >>>> The default syntax for embedded ANSI codes is: > >>>> @@ -1379,23 +1381,23 @@ WARN [main]: Message 2</pre> > >>>> </p> > >>>> <p> > >>>> The throwable conversion word can be followed by an > >>>> option in the form > >>>> - <code>%rEx{short}</code> which will only output the > >>>> first line of the Throwable or > >>>> + <code>%rEx{short}</code> which will only output the > >>>> first line of the Throwable or > >>>> <code>%rEx{n}</code> where the first n lines of the > >>>> stack trace will be printed. > >>>> </p> > >>>> - <p> > >>>> + <p> > >>>> Specifying <code>%rEx{none}</code> or > >>>> <code>%rEx{0}</code> will suppress printing of the exception. > >>>> </p> > >>>> - <p> > >>>> - Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> + <p> > >>>> + Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> suppress matching stack frames from stack traces. > >>>> </p> > >>>> <p> > >>>> - Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> - <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> + Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> + <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> which is operating system dependent. > >>>> </p> > >>>> <p> > >>>> - Use <code>rEx{suffix(<i>pattern</i>)</code> to > add the > >>>> output of <i>pattern</i> to the output only > >>>> + Use <code>rEx{suffix(<i>pattern</i>)</code> to > add the > >>>> output of <i>pattern</i> to the output only > >>>> when there is a throwable to print. > >>>> </p> > >>>> </td> > >>>> @@ -1418,6 +1420,7 @@ WARN [main]: Message 2</pre> > >>>> <td> > >>>> <p>Uses ANSI escape sequences to style the result of > the > >>>> enclosed pattern. The style can consist of > >>>> a comma separated list of style names from the > >>>> following table. > >>>> + (See Jansi <a href="#enable-jansi"> > configuration</a>.) > >>>> <table> > >>>> <tr> > >>>> <th>Style Name</th> > >>>> @@ -1645,17 +1648,18 @@ WARN [main]: Message 2</pre> > >>>> the first n lines of the stack trace will be > printed. > >>>> Specifying <code>%xEx{none}</code> > >>>> or <code>%xEx{0}</code> will suppress printing of > the > >>>> exception. > >>>> </p> > >>>> - <p> > >>>> - Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> + <p> > >>>> + Use <code>filters(<i>packages</i>)</code> where > >>>> <i>packages</i> is a list of package names to > >>>> suppress matching stack frames from stack traces. > >>>> </p> > >>>> <p> > >>>> - Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> - <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> + Use a <code>separator</code> string to separate the > >>>> lines of a stack trace. For example: > >>>> + <code>separator(|)</code>. The default value is the > >>>> <code>line.separator</code> system property, > >>>> which is operating system dependent. > >>>> </p> > >>>> <p> > >>>> The <code>ansi</code> option renders stack traces > with > >>>> ANSI escapes code using the JAnsi library. > >>>> + (See <a href="#enable-jansi">configuration</a>.) > >>>> Use <code>{ansi}</code> to use the default color > >>>> mapping. You can specify your own mappings with > >>>> <code>key=value</code> pairs. The keys are: > >>>> </p> > >>>> @@ -1821,11 +1825,17 @@ WARN [main]: Message 2</pre> > >>>> </tr> > >>>> <caption align="top">Pattern Converters</caption> > >>>> </table> > >>>> + <a name="enable-jansi"></a> > >>>> <h4>ANSI Styling on Windows</h4> > >>>> <p>ANSI escape sequences are supported natively on many > >>>> platforms but are not by default on Windows. To > >>>> - enable ANSI support simply add the <a href=" > >>>> http://jansi.fusesource.org/">Jansi</a> jar to your > >>>> - application and Log4j will automatically make use of it > when > >>>> writing to the console. > >>>> + enable ANSI support add the <a href=" > http://jansi.fusesource. > >>>> org/">Jansi</a> jar to your application > >>>> + and set property <code>log4j.skipJansi</code> to > >>>> <code>false</code>. > >>>> + This allows Log4j to use Jansi to add ANSI escape codes > when > >>>> writing to the console. > >>>> </p> > >>>> + <p>NOTE: Prior to Log4j 2.10, Jansi was enabled by > default. The > >>>> fact that Jansi requires native code > >>>> + means that Jansi can only be loaded by a single class > >>>> loader. For web applications this means the > >>>> + Jansi jar has to be in the web container's classpath. > To > >>>> avoid causing problems for web applications, > >>>> + Log4j will no longer automatically try to load Jansi > >>>> without explicit configuration from Log4j 2.10 onward.</p> > >>>> <h4>Example Patterns</h4> > >>>> <h5>Filtered Throwables</h5> > >>>> <p>This example shows how to filter out classes from > >>>> unimportant packages in stack traces. > >>>> > >>>> > >>> > >>> > >>> -- > >>> Matt Sicker <[email protected]> > > > > > >
