The Apache Logging team is pleased to announce the Apache log4j 2.0-beta4 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 of the improvements available in Logback while fixing some inherent problems in Logback's

This is the sixth release of Log4j 2 and is being made available to encourage use and feedback from the community

New features:

  • Added Log4j 2 to SLF4J adapter.
  • LOG4J2-131: Add SMTPAppender. Thanks to Scott Severtson.
  • Added hostName and contextName to property map.
  • Add MessageFormatMessage and FormattedMessage.
  • LOG4J2-134: Use %red, %white, %blue, and so on in the console appender.
  • LOG4J2-133: Allow custom message creation via a message factory.
  • Added Flume Appender samples.

Fixed Bugs:

  • LOG4J2-156: LocalizedMessageTest fails on linux system. Thanks to Andreas Born.
  • LOG4J2-152: RollingFileAppender's FileRenameAction was throwing a NullPointerException if no directory was specified on the target file name. Thanks to Remko Popma.
  • LOG4J2-150: Convert all System.getProperty calls to use PropertiesUtil to suppress SecurityExceptions.
  • LOG4J2-147: ThreadContextMapFilter was matching on the key instead of the value of the key. Thanks to William Burns.
  • Allow FlumeAvroManager to initialize even if it cannot connect to an agent.
  • LOG4J2-149: SMTPAppender will only cache filtered events. Thanks to Scott Severtson.
  • LOG4J2-145: Add missing serial version IDs.
  • LOG4J2-144: NullPointerException in RFC5424Layout.
  • LOG4J2-143: MessagePatternConverter now returns "null" if the log message is null.
  • LOG4J2-142: Serialized LogEvents were not reset in the output stream causing them to deserialize incorrectly.
  • LOG4J2-139: Fix null pointer exception in SocketAppender if no protocol is specified. The protocol will default to TCP for the SocketAppender and UDP for the SyslogAppender.
  • LOG4J2-140: Typo in documentation of SocketAppender. Thanks to Joern Huxhorn.
  • LOG4J2-137: Fix hang in Dumbster SMTP test server.
  • LOG4J2-130: PatternLayout should format throwables without requiring a converter.
  • LOG4J2-135: BaseConfiguration does not close the first appender. Thanks to Ingo Feltes.
  • LOG4J2-132: AbstractLogger.catching(Throwable) checks for DEBUG level but logs at ERROR level.
  • LOG4J2-129: RoutingAppender was only creating a single appender for the default Route.
  • LOG4J2-126: Allow JMS appenders to recover if the queue or topic is unavailable.
  • LOG4J2-127: AbstractLogger methods were not passing Markers to the isEnabled methods.
  • LOG4J2-125: JMSQueue and JMSTopic Appenders did not allow name to be specified.
  • LOG4J2-111: Enhanced javadoc copyright statement.
  • LOG4J2-120: TCPSocketManager would fail if the initial connection could not be established.
  • LOG4J2-119: A broken socket connection would cause the TCPSocketManager to continuously reconnect.
  • LOG4J2-123: The example for ThreadContextMapFilter was incorrect. Thanks to Olivier Lamy.
  • LOG4J2-116: File renaming was using the wrong date value. Enhanced DefaultRolloverStrategy to store newest files in highest index as well as lowest.
  • LOG4J2-115: ThreadContext Map elements with null values are now ignored when constructing a Flume event and in the RFC5424 Layout.
  • LOG4J2-113: StructuredDataFilter createFilter was annotated with PluginAttr instead of PluginElement for the KeyValuePairs.
  • LOG4J2-114: StructuredDataMessage was validating the length of the values in the event Map instead of the lengths of the keys. Thanks to Arkin Yetis.


  • LOG4J2-136: Allow newlines to be escaped in Syslog and RFC5424 layouts. Allow Throwables to be included in the output from RFC5424Layout. Thanks to Scott Severtson.
  • LOG4J2-128: Add follow attribute to Console Appender.
  • LOG4J2-122: Add unit test to verify exceptions are thrown when the socket connection fails.
  • LOG4J2-110: Renamed log4j12-api to log4j-1.2-api.

Apache Log4j 2.0-beta4 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.

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: