
              Apache Log4j 2.0-beta2 RELEASE NOTES

The Apache Log4j 2 team is pleased to announce the Log4j 2.0-beta2 release!

Apache Log4j 2.0-beta2 requires a minimum of Java 5 to build and run. Basic compatibility with
Log4j 1.x is provided through the log4j12-api component, however it does not implement some of the
very implementation specific classes and methods. The package names and Maven groupId have been changed to
org.apache.logging.log4j to avoid any conflicts with log4j 1.x.

Bug fixes and enhancements

Changes in this version include:

New features:
o LOG4J2-35:  Add interval and modulate options to TimeBasedTriggeringPolicy to allow more fine-grained control of
        when file rolling should occur. 
o LOG4J2-58:  Add support for filtering packages from stack traces. 
o LOG4J2-84:  If system property "disableThreadContextStack" is set pushes to the ThreadContext will be ignored. If
        system property "disableThreadContext" is set both puts and pushes will be ignored. 
o LOG4J2-83:  If system property "disableThreadContextMap" is set puts to the ThreadContext will be ignored. If
        system property "disableThreadContext" is set both puts and pushes will be ignored. 
o Add support for ANSI colors by adding the highlight and style pattern converters. Fix pattern
        parsing to allow nested patterns. 
o Allow the status logging to be directed to stderr or to a file. 
o Add getFormats to MultiformatMessage and allow StructuredDataMessage to format as XML. 

Fixed Bugs:
o DefaultConfiguration was not starting the Console Appender. 
o LOG4J2-92:  Converted DynamicThresholdFilter to use KeyValuePair. Fixed bugs in the Map-based filters
        to allow declaration of multiple values for a key to match the documentation. 
o LOG4J2-88:  Many logging methods in AbstractLogger were set to an incorrect logging level. catching was
        using the THROWING marker and was set to debug instead of error. 
o LOG4J2-91:  Log4j 1.2 adapter's Category class was missing 3 log methods. 
o LOG4J2-84:  If the ThreadContext stack is empty the LogEvent will contain a null value to reduce the overhead of
        creating log events and in the size of the serialized object. Changed the ThreadContext stack to use
        a custom stack interface instead of java.util.Stack as that class is overly heavy. This change will
        cause an API incompatibility. 
o LOG4J2-83:  If the ThreadContext map is empty the LogEvent will contain a null value to reduce the overhead of creating
        log events and in the size of the serialized object. 
o LOG4J2-90:  Add documentation on client vs server mode to performance page. 
o Move variable substitution from PatternLayout to appropriate converters to improve performance. 

Changes:
o Made ParameterizedMessage, StringFormattedMessage and ThreadDumpMessage immutable. LocalizedMessage is
        immutable except that it will be updated with the logger name when it is added to the LogEvent. 


For complete information on Apache Log4j 2, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Log4j 2 website:

http://logging.apache.org/log4j/2.x/


