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). 


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.ConsoleAppenderAnsiMessagesMain
>>>> 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.ConsoleAppenderAnsiStyleJira180Main
>>>> 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.ConsoleAppenderAnsiStyleJira319Main
>>>> 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.ConsoleAppenderAnsiStyleLayoutMain
>>>> 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.ConsoleAppenderJAnsiMessageMain
>>>> 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.ConsoleAppenderJAnsiXExceptionMain
>>>> 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.ConsoleAppenderNoAnsiStyleLayoutMain
>>>> 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]>
> 
> 

Reply via email to