The Apache Log4j 2 team is pleased to announce the Log4j 3.0.0-alpha1 release!
The artifacts may be downloaded from https://logging.apache.org/log4j/3.x/download.html. As the Java ecosystem has evolved, requests have been received from users, and the need for improved security has become more apparent, changes were necessariy in Log4j’s design: • With the introduction of the Java Platform Module System (JPMS) changes were needed to how the various log4j modules are packaged. While not every log4j module is now a fully compliant JPMS module with its own module-info.java file, all the modules likely to be used in a JPMS environment are. • Many optional components, such as Scripting, JNDI, JPA and JMS, have been moved to their own modules. This makes Log4j-core slightly smaller in 3.x and aids in security by not having jars with unwanted behaviors present, making disabling them via system properties unnecessary. • All plugins constructed using Log4j 3.x are now located using Java’s ServiceLoader. This avoids many of the problems users had packaging plugins in "shaded" jars as that technology directly supports ServiceLoader. Plugins constructed using Log4j 2.x will still function in Log4j 3.x. • Log4j’s annotation processor has been individually packaged separate from Log4j-core and the plugin system it enables. For applications using the module path this makes it easier to provide the annotation processor since it must be explicitly declared in those cases. • Log4j 3.x now uses an internal dependency injection framework to allow plugins to be injected with instances of classes they are dependent on. • Many system properties used by Log4j can now be set to apply to a single LoggerContext making configuration in application frameworks that support multiple applications more flexible. • Some deprecated classes have been removed. However, every attempt has been made to ensure that user code compiled for Log4j 2.x will continue to operate with the Log4j 3.x libraries present instead. Apache Log4j 3.0.0-alpha1 requires a minimum of Java 11 to build and run. For complete information on Apache Log4j 3.x, including instructions on how to submit bug reports, patches, or suggestions for improvement, see the Apache Log4j 3.x website - https://logging.apache.org/log4j/3.x/. Changes Added • Allow plugins to be created through more flexible dependency injection patterns. (for LOG4J2-1188 by Matt Sicker) • Allow to force LOG4J2 to use TCCL only. (for LOG4J2-2171 by rmannibucau, Ralph Goers) • Allow web lookup to access more information. (for LOG4J2-2523 by Romain Manni-Bucau, Ralph Goers) • Allow web lookup of session attributes. (for LOG4J2-2688 by Ralph Goers, Romain Manni-Bucau) • Add support for injecting plugin configuration via builder methods. (for LOG4J2-2700 by Matt Sicker) • Add scopes API for customizing plugin instance lifecycle. (for LOG4J2-2852 by Matt Sicker) • Add qualifier annotations for distinguishing instances of the same type. (for LOG4J2-2853 by Matt Sicker) • Create standardized dependency injection API. This is supported in several plugin categories and other configurable instances previously defined via system properties. (for LOG4J2-2854 by Matt Sicker) • Add conditional annotations to support more declarative binding factory bundle classes. (for LOG4J2-3300 by Matt Sicker) • Add built-in JSON configuration parser for a useful structured configuration file format which only requires the java.base module. (for LOG4J2-3415 by Matt Sicker) • Add @Ordered annotation to support plugin ordering when two or more plugins within the same category have the same case-insensitive name. (for LOG4J2-857 by Matt Sicker) Changed • Simplify Maven site phase and align it with the one in 2.x branch. (for 1220 by Volkan Yazıcı) • Update build to use Java 11 bytecode. (for 480 by Ralph Goers) • Convert documentation into AsciiDoc format. (for LOG4J2-1802 by Matt Sicker) • Rename package core.util.datetime to core.time.internal.format to clarify these classes are to be considered private. (for LOG4J2-2224 by Remko Popma) • Move time-related classes from core.util to core.time. Classes considered private moved to core.time.internal. (for LOG4J2-2225 by Remko Popma) • Split off Kafka support into a new module log4j-kafka. (for LOG4J2-2227 by Gary Gregory) • Split off ZeroMq/JeroMq support into a new module log4j-jeromq. (for LOG4J2-2228 by Gary Gregory) • Split off SMTP support into a new module log4j-smtp. (for LOG4J2-2230 by Gary Gregory) • Split off CSV layout into a new module log4j-csv. (for LOG4J2-2231 by Gary Gregory) • Split off JMS support into a new module log4j-jms. (for LOG4J2-2232 by Gary Gregory) • Split off JDBC support into a new module log4j-jdbc. (for LOG4J2-2233 by Gary Gregory) • Split off Jackson-based layouts into their own modules: log4j-layout-jackson-json, log4j-layout-jackson-xml and log4j-layout-jackson-yaml. (for LOG4J2-2237 by Gary Gregory) • Update builder methods from the "with" prefix to the "set" prefix. (for LOG4J2-2492 by Gary Gregory) • Remove deprecated code. (for LOG4J2-2493 by Gary Gregory) • Fix typo in method MergeStrategy.mergeConfigurations. (for LOG4J2-2617 by Matt Sicker) • Separate plugin support to its own module. Plugin annotation processor will now generate a Java source file compatible with java.util.ServiceLoader instead of a binary file. (for LOG4J2-2621 by Ralph Goers) • Rename PluginVisitor and related classes to ConfigurationInjectionBuilder. (for LOG4J2-2683 by Matt Sicker) • Locate plugins in modules. (for LOG4J2-2690 by Ralph Goers) • Split off JNDI support into a new module log4j-jndi. (for LOG4J2-3242 by Ralph Goers) • Split off scripting support into a new module log4j-script. (for LOG4J2-3307 by Ralph Goers) • Defer loading of StrLookup plugin classes until first usage. (for LOG4J2-3441 by Matt Sicker) • Flatten the ThreadContextMap interfaces with default methods. (for LOG4J2-3626 by Matt Sicker) • Allow Log4j properties to be provided in JSON files. (for LOG4J2-3658 by Ralph Goers) • Unify plugin builders and plugin factories. (for LOG4J2-860 by Matt Sicker) • Update Conversant Disruptor from 1.12.15 to 1.12.21. The new version requires Java 11. (for LOG4J2-2079 by Ralph Goers, Volkan Yazıcı) Removed • Remove support for java.io.Serializable in several classes including Message, Layout, LogEvent, Logger, and ReadOnlyStringMap. (for LOG4J2-3228 by Matt Sicker) Fixed • EnvironmentLookup may throw NPE. (for LOG4J2-2244 by Gary Gregory) • Move ProcessIdUtil from log4j-api to log4j-core. (for LOG4J2-2279 by Gary Gregory, Remko Popma) • FixedDateFormat parses timezone offsets, -8:00 is interpreted as GMT-8:00. (for LOG4J2-2306 by Carter Kozak) • RoutingAppender.Builder#setPurgePolicy fluently returns the builder instance. (for LOG4J2-2545 by Carter Kozak) • Reduce Log4j 2 initialization time by deferring loading Plugin classes. (for LOG4J2-2795 by Ralph Goers) • Fixes incorrect constructor call in LocalizedMessageFactory. (for LOG4J2-2850 by Volkan Yazıcı, sandeepbarnwal) • Fix file descriptor leak on Tomcat. (for LOG4J2-3663 by lenoch7, Piotr P. Karwasz) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org