| |
| Apache Log4j 2.8 RELEASE NOTES |
| |
| The Apache Log4j 2 team is pleased to announce the Log4j 2.8 release! |
| |
| Apache Log4j is a well known framework for logging application behavior. Log4j 2 is an upgrade |
| to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides |
| many other modern features such as support for Markers, lambda expressions for lazy logging, |
| property substitution using Lookups, multiple patterns on a PatternLayout and asynchronous |
| Loggers. Another notable Log4j 2 feature is the ability to be "garbage-free" (avoid allocating |
| temporary objects) while logging. In addition, Log4j 2 will not lose events while reconfiguring. |
| |
| This release contains several bugfixes and new features. The new features include the ability |
| to have the RollingFileAppender log directly to the archive files. More details on the new features and |
| fixes are itemized below. |
| |
| Note that subsequent to the 2.6 release a minor source incompatibility was found due to the |
| addition of new methods to the Logger interface. If you have code that does: |
| |
| logger.error(null, “This is the log message”, throwable); |
| |
| or similar with any log level you will get a compiler error saying the reference is ambiguous. |
| To correct this either do: |
| |
| logger.error(“This is the log message”, throwable); |
| |
| or |
| |
| logger.error((Marker) null, “This is the log message”, throwable); |
| |
| The Log4j 2.8 API, as well as many core components, maintains binary compatibility with previous releases. |
| |
| GA Release 2.8 |
| |
| Changes in this version include: |
| |
| New features: |
| o LOG4J2-1032: Make DefaultRolloverStrategy more efficent when renaming files. Add nomax option to the fileIndex attribute. |
| o LOG4J2-1101: RollingFileAppender now supports omitting the file name and writing directly to the archive files. |
| o LOG4J2-1243: Allow default value in property to be a Lookup. |
| o LOG4J2-1787: Document how to exclude transitive conflicting dependencies in Maven and Gradle. |
| o LOG4J2-1773: Add StatusLoggerRule to allow unit tests to set a status level. |
| o LOG4J2-424: Add non-string data type support to JdbcAppender via new ColumnMapping plugin. |
| o LOG4J2-1771: Add a Builder to ColumnConfig and deprecate ColumnConfig.createColumnConfig(). |
| o LOG4J2-1770: Add a Builder to JdbcAppender and deprecate JdbcAppender.createAppender(). |
| o LOG4J2-1764: Use MethodHandle in ContextDataFactory cached constructor. |
| o LOG4J2-1730: Add Apache Cassandra appender and ColumnMapping plugin. |
| o LOG4J2-1759: Add TypeConverter for java.util.UUID. |
| o LOG4J2-1758: Add TypeConverter for java.nio.file.Path. |
| o LOG4J2-1755: Add TypeConverter and constraint validators for java.net.InetAddress and port numbers. |
| o LOG4J2-969: Refactor SyslogAppender so that Layout is a Plugin element. |
| o LOG4J2-1660: Added public method ThreadContext::getThreadContextMap; removed class ThreadContextAccess. |
| o LOG4J2-1379: Add documentation regarding YAML configuration format. |
| o LOG4J2-1718: Introduce marker interface AsynchronouslyFormattable. |
| o LOG4J2-1681: Introduce interfaces IndexedStringMap and IndexedReadOnlyStringMap, supporting garbage-free iteration over sorted map. |
| o LOG4J2-1695: Add a Builder to ScriptPatternSelector and deprecate ScriptPatternSelector.createSelector(). |
| o LOG4J2-1696: Add a Builder to MarkerPatternSelector and deprecate MarkerPatternSelector.createSelector(). |
| o LOG4J2-1697: Add a SerializerBuilder to PatternLayout and deprecate PatternLayout.createSerializer(). |
| o LOG4J2-1701: Add a Builder to RandomAccessFileAppender and deprecate RandomAccessFileAppender.createAppender(). |
| o LOG4J2-1703: Add a Builder to MemoryMappedFileAppender and deprecate MemoryMappedFileAppender.createAppender(). |
| o LOG4J2-1704: Add a Builder to RollingRandomAccessFileAppender and deprecate RollingRandomAccessFileAppender.createAppender(). |
| o LOG4J2-1709: Add a Builder to SyslogAppender and deprecate SyslogAppender.createAppender(). |
| o LOG4J2-1707: Allow TCP Socket Appender to set socket options. |
| o LOG4J2-1708: Allow Secure Socket Appender to set socket options. |
| o LOG4J2-1737: Add a Builder to SyslogLayout and deprecate SyslogLayout.createLayout(Facility, boolean, String, Charset). |
| o LOG4J2-1738: Add a Builder to JsonLayout and deprecate org.apache.logging.log4j.core.layout.JsonLayout.createLayout(Configuration, boolean, boolean, boolean, boolean, boolean, boolean, String, String, Charset, boolean). |
| o LOG4J2-1739: Add Builder to KafkaAppender and deprecate KafkaAppender.createAppender(Layout, Filter, String, boolean, String, Property[], Configuration). |
| o LOG4J2-1733: Add SyncSend attribute to KafkaAppender (as in KafkaLog4jAppender). Thanks to Vincent Tieleman. |
| |
| Fixed Bugs: |
| o LOG4J2-1780: Eliminate the use of the ExecutorServices in the LoggerContext. |
| o LOG4J2-1786: ConfigurationScheduler now preserves interrupt flag during stop. |
| o LOG4J2-1779: Fixed bug where AsyncLogger did not resolve configuration properties. |
| o LOG4J2-1769: Fixed concurrency issue affecting all layouts except PatternLayout and GelfLayout, which caused scrambled output and exceptions when logging synchronously from multiple threads. Thanks to Brandon Goodin. |
| o LOG4J2-1724: Using variables in GelfLayout's additional fields at runtime. Thanks to Alexander Krasnostavsky. |
| o LOG4J2-1762: Add Builder to GelfLayout. |
| o LOG4J2-1649: Insure the ConfigurationScheduler shuts down without blocking. Thanks to Georg Friedrich. |
| o LOG4J2-1653: CronTriggeringPolicy would use the wrong date/time when rolling over and create multiple triggering policies on reconfiguration. Thanks to Georg Friedrich. |
| o LOG4J2-1748: Do not use non-daemon thread pool for rollover tasks. |
| o LOG4J2-1628: Fixed file locking regression in FileAppender introduced in 2.6. |
| o LOG4J2-1744: The custom logger Generate tool no longer requires the log4j-api module on the classpath. |
| o LOG4J2-1731: SslSocketManager now respects connectTimeoutMillis. Thanks to Chris Ribble. |
| o LOG4J2-1682: Logger using LocalizedMessageFactory prints key instead of message. Thanks to Markus Waidhofer. |
| o LOG4J2-1720: Make GelfLayout independent of Jackson. |
| o LOG4J2-1719: Fixed race condition in ObjectMessage and SimpleMessage, ensuring that the log message contains the value the object has during the logging call. |
| o LOG4J2-1688: Fixed bug where elements of a log message parameter array were nulled out in garbage-free mode. |
| o LOG4J2-1692: Add putAll() method to CloseableThreadContext. Thanks to Greg Thomas. |
| o LOG4J2-1689: Add CleanableThreadContextMap interface supporting method removeAll(Iterable<String>). |
| o LOG4J2-1685: Option 'disableAnsi' in PatternLayout to unconditionally disable ANSI escape codes. Thanks to Raman Gupta. |
| o LOG4J2-1706: Make TimeFilter usable as global filter and as logger filter. |
| o LOG4J2-1722: (GC) Avoid allocating temporary objects in VariablesNotEmptyReplacementConverter. |
| o LOG4J2-1717: (GC) Avoid allocating temporary objects in EncodingPatternConverter. |
| o LOG4J2-1716: (GC) Avoid allocating temporary objects in MapPatternConverter. (Note that constructing a MapMessage is not garbage-free.) |
| o LOG4J2-1683: (GC) Avoid allocating temporary objects in MapMessage. |
| o LOG4J2-1715: (GC) Avoid allocating temporary objects in NdcPatternConverter. (Note that use of the ThreadContext stack is not garbage-free.) |
| o LOG4J2-1714: (GC) Avoid allocating temporary objects in AbstractStyleNameConverter. |
| o LOG4J2-1680: (GC) Avoid allocating temporary objects in TimeFilter. |
| o LOG4J2-1679: (GC) Avoid allocating temporary objects in StructuredDataFilter. |
| o LOG4J2-1678: (GC) Avoid allocating temporary objects in ThreadContextMapFilter. |
| o LOG4J2-1677: (GC) Avoid allocating temporary objects in MapFilter. |
| o LOG4J2-1674: (GC) Avoid allocating temporary objects in ThresholdFilter. |
| o LOG4J2-1673: (GC) Avoid allocating temporary objects in MarkerFilter. |
| o LOG4J2-1672: (GC) Avoid allocating temporary objects in LevelRangeFilter. |
| o LOG4J2-1671: (GC) Avoid allocating temporary objects in EqualsIgnoreCaseReplacementConverter. |
| o LOG4J2-1670: (GC) Avoid allocating temporary objects in EqualsReplacementConverter. |
| o LOG4J2-1669: (GC) Avoid allocating temporary objects in MaxLengthConverter. |
| o LOG4J2-1668: (GC) Avoid allocating temporary objects in MarkerPatternConverter. |
| o LOG4J2-1667: (GC) Avoid allocating temporary objects in SequenceNumberPatternConverter. |
| o LOG4J2-1666: (GC) Avoid allocating temporary objects in RelativeTimePatternConverter. |
| o LOG4J2-1665: (GC) Avoid allocating temporary objects in IntegerPatternConverter. |
| o LOG4J2-1637: Fixed problems when used in OSGi containers (IllegalAccessError, NoClassDefFoundError). |
| o LOG4J2-1226: Improve LogEvent serialization to handle non-serializable Messages and deserializing when required classes are missing. |
| o LOG4J2-1663: Ensure SortedArrayStringMap can be serialized and deserialized without errors regardless of content. |
| o LOG4J2-1658: Prevent NPE in ThreadContextMapFactory::createThreadContextMap when initializing Log4j with Configurator::initialize and the BasicContextSelector is used. |
| o LOG4J2-1645: Immutable empty StringMap. |
| o LOG4J2-1623: Configurable JVM shutdown hook timeout. |
| o LOG4J2-1712: Pick up bug fixes from Apache Commons Lang's org.apache.commons.lang3.time package. |
| o LOG4J2-1636: Console Appender does not pick up Oracle Java 8's sun.stdout.encoding and sun.stderr.encoding. Thanks to Eldar Gabdullin. |
| o LOG4J2-1639: Fix MemoryMappedFileAppender.createAppender() Javadoc for immediateFlush. Thanks to Sridhar Gopinath. |
| o LOG4J2-1676: Some LogEvents may not carry a Throwable (Use Message.getThrowable() in log(Message) methods.) Thanks to Joern Huxhorn. |
| o LOG4J2-1723: Unwanted transitive dependency on geronimo-jms_1.1_spec causes OSGi tests to fail. Thanks to Ludovic HOCHET. |
| o LOG4J2-1664: Improve OSGi unit tests. Thanks to Ludovic HOCHET. |
| o LOG4J2-1687: NPE in ThrowableProxy when resolving stack in Java EE/OSGi environment. Thanks to Robert Christiansen. |
| o LOG4J2-1642: DefaultShutdownCallbackRegistry can throw a NoClassDefFoundError. Thanks to Johno Crawford. |
| o LOG4J2-1474: CronTriggeringPolicy raise exception and fail to rollover log file when evaluateOnStartup is true. Thanks to yin mingjun, Neon. |
| o LOG4J2-1734: SslSocketManagerFactory might leak Sockets when certain startup errors occur. |
| o LOG4J2-1736: TcpSocketManagerFactory might leak Sockets when certain startup errors occur. |
| o LOG4J2-1740: Add CronTriggeringPolicy programmatically leads to NPE. |
| o LOG4J2-1743: CompositeConfiguration does not add filters to appenderRefs. Thanks to Toby Shepheard. |
| o LOG4J2-1756: Adds xmlns in schema and some other tags. Thanks to shubhankar1100. |
| |
| Changes: |
| o LOG4J2-1781: Update Conversant Disruptor from 1.2.7 to 1.2.10 |
| o LOG4J2-1774: Replace MockEJB dependency in unit tests with Spring Test and Mockito. |
| o LOG4J2-1644: Inefficient locking in AbstractLoggerAdapter. Thanks to Tim Gokcen, Pavel Sivolobtchik. |
| o LOG4J2-1641: Update JeroMQ from 0.3.5 to 0.3.6. |
| o LOG4J2-1647: Update Commons Lang from 3.4 to 3.5. |
| o LOG4J2-1646: Migrate to Mockito 2.x in unit tests. |
| o LOG4J2-1655: Update Jackson from 2.8.3 to 2.8.4. |
| o LOG4J2-1735: Update Jackson from 2.8.4 to 2.8.5. |
| o LOG4J2-1656: Update Apache Flume from 1.6.0 to 1.7.0. |
| o LOG4J2-1698: Update LMAX Disruptor from 3.3.5 to 3.3.6. |
| o LOG4J2-1700: Update Jansi from 1.13 to 1.14. |
| o LOG4J2-1750: Update Kafka from 0.10.0.1 to 0.10.1.1. |
| o LOG4J2-1751: Update liquibase-core from 3.5.1 to 3.5.3. |
| o LOG4J2-1302: The log4j-slf4j-impl module now declares a runtime dependency on log4j-core. While not technically required, this makes the log4j-slf4j-impl module behave similarly to slf4j-log4j12, and facilitates migration to Log4j 2. |
| |
| |
| Apache Log4j 2.8 requires a minimum of Java 7 to build and run. Log4j 2.3 was the |
| last release that supported Java 6. |
| |
| Basic compatibility with Log4j 1.x is provided through the log4j-1.2-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. |
| |
| 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: |
| |
| https://logging.apache.org/log4j/2.x/ |