Apache Logging Services

Sunday July 14, 2013

Apache Log4j 2.0-beta8 released

The Apache Log4j 2 team is pleased to announce the Log4j 2.0-beta8 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 architecture.

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

Fixed Bugs

  • LOG4J2-302: Added toString methods to ThreadContextStack/Map implementation classes.
  • LOG4J2-300: WriterThread was ending when no agents are available which caused an OutOfMemoryError.
  • LOG4J2-278: Filter calls from Avro or Flume to be ignored by the FlumeAppender.
  • LOG4J2-279: FlumePersistentManager now calls Berkeley DB from threads to avoid encountering interrupts in the application.
  • LOG4J2-296: Wasted work in FlumePersistentManager.createManager.
  • LOG4J2-297: Wasted work in TestConfigurator.testEnvironment.
  • LOG4J2-298: Wasted work in StyleConverterTest.setupClass.
  • LOG4J2-280: AsyncLogger threads are now daemon threads and won't prevent the JVM from shutting down anymore.
  • LOG4J2-295: Fast(Rolling)FileAppender now correctly handles messages exceeding the buffer size.
  • OG4J2-271: FastRollingFileAppender with TimeBasedTriggeringPolicy now works correctly if append=false.
  • LOG4J2-267: FastRollingFileAppender with TimeBasedTriggeringPolicy now works correctly if append=false.
  • LOG4J2-292: Fast(Rolling)FileAppender now correctly appends to (does not overwrite) existing file.
  • LOG4J2-289: Upgrade javadoc plugin to 2.9.1 to fix javadoc security issue.
  • LOG4J2-139: Fix NullPointerException (regression due to fix for LOG4J2-228)
  • LOG4J2-275: FlumeAvroManager fails to notify client of failing event if Flume RPCClient cannot be created.

Changes

  • LOG4J2-270: Improved logging initialization in Servlet containers, especially Servlet 3.0 and newer where Log4j now initializes and deinitializes automatically with no deployment descriptor configuration.
  • LOG4J2-301: Add printf methods to Logger API.
  • LOG4J2-282: Allow the default status level to be specified as a system property.
  • LOG4J2-294: LogManager.getLogger can now be called without a logger name or with a null logger name.
  • LOG4J2-288: Update JUnit to 4.11 from 4.7.
  • LOG4J2-286: Update test H2 JDBC driver to 1.172 from 1.171.
  • LOG4J2-285: Update Jansi jar to 1.11 from 1.9.
  • LOG4J2-284: Update Log4j 1 dependency to 1.2.17 from 1.2.16.
  • LOG4J2-283: Remove dependency on Apache ORO jar.
  • LOG4J2-277: Wasted work in RollingAppenderSizeTest.testAppender() and others.
  • LOG4J2-168: Include arbitrary message fields in RFC-5424 structured data. Thanks to Scott Severtson.
  • LOG4J2-274: Wasted work in UUIDUtil initialization.
  • LOG4J2-273: Wasted work in XMLLayout.toSerializable().

Apache Log4j 2.0-beta8 requires a minimum of Java 6 to build and run. 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:

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

Monday June 03, 2013

Dominik Psenner to join the Apache Logging PMC

Dominik Psenner, active mostly in log4net, has been elected into the Apache Logging PMC. All the best for your new role and thank you for your valuable contributions so far.

Monday May 13, 2013

Apache Log4j 2.0-beta6 released

The Apache Log4j 2 team is pleased to announce the Log4j 2.0-beta6 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 architecture.

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

Fixed Bugs:

  • LOG4J2-231: Logger.getParent() was not returning the correct Logger.
  • LOG4J2-201: Renamed Plugin annotation attribute from "type" to "category".
  • LOG4J2-219: Fix: install default root logger if not configured (this is unchanged), but make sure to include configured named loggers. Clarified documentation. Thanks to Peter DePasquale.
  • LOG4J2-159: Use OSGi version format in Fragment-Host
  • LOG4J2-234: RegexFilter threw a NullPointerException when used as a context-wide filter.
  • LOG4J2-192: Add support for interpolating Environment variables when processing the configuration.
  • LOG4J2-235: Removed dependency on tools jar from core module, made jconsole dependency optional. Thanks to Sebastian Oerding.
  • LOG4J2-233: Fixed link to log4j-user mailing list.
  • LOG4J2-222: Disruptor will now shutdown during Tomcat shutdown. Thanks to Steven Yang.
  • LOG4J2-224: The FlumeAppender failed to start if the Flume RPCClient could not connect to any Flume agents.
  • LOG4J2-223: Fix LoggerContext start and stop to eliminate IllegalStateException and NoClassDefFound errors.
  • LOG4J2-221: Remove hundreds of compiler warnings. Thanks to Nick Williams.
  • LOG4J2-215: Various small documentation fixes.
  • LOG4J2-217: Ensure PluginManager streams are always closed. Thanks to Fabien Sanglard.

Changes:

  • LOG4J2-237: Moved JMX Client GUI classes into separate jmx-gui submodule.
  • LOG4J2-230: Improved error reporting when misconfigured. Thanks to Wojciech Zaręba.
  • Renamed AsynchAppender to AsyncAppender. Plugin name became Async (was Asynch).
  • Removed CheckStyle false positives for NewlineAtEndOfFile and whitespace following '*' at end of line in javadoc.
  • Moved Clock interface to package org.apache.logging.log4j.core.helpers.
  • LOG4J2-225: Documentation updates to clarify use and impact of location in pattern layouts.

Apache Log4j 2.0-beta5 requires a minimum of Java 6 to build and run. 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:

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

Saturday May 11, 2013

Welcome Nick Williams

The Apache log4j team would like to welcome Nick Williams as a new committer! Welcome Nick!

Thursday April 25, 2013

Apache Log4j 2.0-beta5 released

The Apache Log4j 2 team is pleased to announce the Log4j 2.0-beta5 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 architecture.

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

New features:

  • LOG4J2-207: Add JMX support. Thanks to Remko Popma.
  • LOG4J2-187: Add tag library. Thanks to Nick Williams.
  • LOG4J2-164: Add methods is/setEndOfBatch to LogEvent. Thanks to Remko Popma.
  • LOG4J2-163: Add support for asynchronous loggers. Thanks to Remko Popma.
  • LOG4J2-179: Add Logger interface APIs to log at given levels.
  • Added FlumePersistentManager which writes to BerkeleyDB and then writes to Flume asynchronously.
  • LOG4J2-155: Expose file appender configuration details via an advertisement mechanism.

Fixed Bugs:

  • LOG4J2-205: Fix deadlock in SocketAppender. Added option to not wait for socket reconnect.
  • LOG4J2-211: Removing extra spaces in entry and exit method output. Thanks to Nick Williams.
  • LOG4J2-212: Loggers without a "." had no parent logger.
  • LOG4J2-212: Call LoggerContext.stop when the application is shutdown.
  • LOG4J2-210: MapMessage was not enclosing key value in quotes when generating XML. Thanks to Arkin Yetis.
  • LOG4J2-198: FlumeAvroManager now uses Flume RPCClient.
  • LOG4J2-196: FlumeAvroManager now uses Flume RPCClient.
  • LOG4J2-207: Use the Maven group ID org.apache.logging.log4j for all artifacts.
  • LOG4J2-195: Unit tests now create files in the target directory. Thanks to Remko Popma.
  • LOG4J2-193: RollingFastFileAppender (in log4j-async) did not roll over. Thanks to Remko Popma.
  • LOG4J2-199: Highlight subprojects in sub-navigation. Thanks to Remko Popma.
  • LOG4J2-200: LoggerContext method renamed to removeFilter from removeFiler. Thanks to Remko Popma.
  • LOG4J2-194: ThrowableFormatOptionsTest failed on Windows due to CR/LF issue. Thanks to Remko Popma.
  • LOG4J2-190: BaseConfiguration addLoggerAppender saved appender using the Logger name. Thanks to Werner.
  • LOG4J2-189: The blocking parameter did not work properly on AsynchAppender. Thanks to Werner.
  • LOG4J2-188: appender-refs on AsynchAppender didn't support the level and filter elements. Thanks to Werner.
  • LOG4J2-176: Avoid IllegalArgumentException in AsynchAppender. Thanks to Remko Popma.
  • LOG4J2-181: OutputStreamManager now adds the layout header whenever the OutputStream is set.
  • LOG4J2-177: Fix NullPointerException in DatagramOutputStream when flush is called from multiple threads. Thanks to Remko Popma.
  • LOG4J2-175: Plugin cache should be reset when addPackages is called.
  • LOG4J2-159: Add Fragment-Host to MANIFEST.MF for log4j2-core. Thanks to Jan Winter.
  • LOG4J2-167: Configurator throws a ClassCastException if LogManager returns a SimpleLoggerContext.
  • LOG4J2-169: ConfigurationFactory was adding factories on every call.
  • LOG4J2-161: Modify ClassLoaderContextSelector to use the first ClassLoader in the child parent hierarchy that has a Context with a configuration to allow JSPs to use the WebApp's context and configuration.

Changes:

  • LOG4J2-214: Async documentation update. Thanks to Remko Popma.
  • LOG4J2-208: Move async subproject into core. Thanks to Remko Popma.
  • LOG4J2-160: Move Throwable pattern converter options processing to ThrowableFormatOptions class. Thanks to Joanne Polsky.
  • LOG4J2-157: Allowed Loggers access to the properties in the LoggerConfig. Thanks to Remko Popma.
  • LOG4J2-153: Added ability to include or exclude location information. Thanks to Remko Popma.
  • LOG4J2-151: Allow Logger and LoggerContext to be subclassed. Thanks to Remko Popma.

Apache Log4j 2.0-beta5 requires a minimum of Java 6 to build and run. 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:

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

Tuesday April 23, 2013

Welcome Remko Popma

The Apache log4j team would like to welcome Remko Popma as a new committer! Welcome Remko!

Monday February 04, 2013

Apache log4j 2.0-beta4 released

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

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.

Changes:

  • 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:

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

Saturday December 08, 2012

Apache log4php moved to git

I'm pleased to announce that Apache log4php project has finished it's move from Subversion to Git version control system.

Links to the available repositories are as follows:

The official repository (and web interface), writable for developers:
https://git-wip-us.apache.org/repos/asf/logging-log4php.git

Official read-only mirror:
git://git.apache.org/logging-log4php.git

Github read-only mirror:
https://github.com/apache/logging-log4php

The exact workflow is still under discussion, however it will probably be based heavily on the git-flow.

We believe this will allow us to function better as an open source project, and accept user contributions more easily.

Thursday November 15, 2012

Apache Logging log4j 2.0-beta3 released

The Apache Logging team is pleased to announce the Apache log4j 2.0-beta3 release![Read More]

Sunday November 04, 2012

Gary Gregory to join the Apache Logging PMC

Gary Gregory, who commits mainly to log4j 2, has been elected into the Apache Logging PMC. All the best for your new role.

Saturday October 13, 2012

Apache log4php 2.3.0 released

The Apache log4php team is pleased to announce the release of Apache log4php 2.3.0.

Significant changes in this release include:


  • Ability to override the default renderer.

  • New experimental appender: FirePHP

  • Many improvemetns to LoggerLayoutPatern (support for long conversion
    words, many new conversion words)

  • Various improvements to appenders

  • Several bugfixes

Release notes, including the full change, log can be found here:
http://logging.apache.org/log4php/changelog.html

The release is available from:
http://logging.apache.org/log4php/download.html

The PEAR package will be available in a couple of days from our PEAR channel:
http://pear.apache.org/log4php/Y

Thanks to everyone who participated in the making of this release.

Best regards,
The Apache log4php team

Apache Logging log4j 2.0-beta2 released

The Apache Logging team is pleased to announce the Apache log4j 2.0-beta2 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
architecture.

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

Bug fixes and enhancements

Changes in this version include:

New features:



  • LOG4J2-35: Add interval and modulate options to TimeBasedTriggeringPolicy to allow more fine-grained control of
    when file rolling should occur.

  • LOG4J2-58: Add support for filtering packages from stack traces.

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

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

  • Add support for ANSI colors by adding the highlight and style pattern converters. Fix pattern
    parsing to allow nested patterns.

  • Allow the status logging to be directed to stderr or to a file.

  • Add getFormats to MultiformatMessage and allow StructuredDataMessage to format as XML.

Fixed Bugs:



  • DefaultConfiguration was not starting the Console Appender.
  • 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.

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

  • LOG4J2-91: Log4j 1.2 adapter's Category class was missing 3 log methods.

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

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

  • LOG4J2-90: Add documentation on client vs server mode to performance page.

  • Move variable substitution from PatternLayout to appropriate converters to improve performance.

Changes:



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

Requirements

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.

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/

Monday September 24, 2012

Apache log4j 2.0-beta1 released

The Apache Logging team is pleased to announce the Apache log4j 2.0-beta1 release! This is the third release of Log4j 2 and is being made available to encourage use and feedback from the community.

[Read More]

Sunday August 05, 2012

Apache Logging log4j 2.0-alpha1 released

The Apache Logging team is pleased to announce the Apache log4j 2.0-alpha1 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 architecture.

This is the first release of Log4j 2 and is being made available to get feedback from the community.

Some of the features and improvements in Log4j 2 are:


  • API Separation - The API for Log4j is separate from the implementation. It is now clear to application developers what classes and methods they can use with compatibility being assured, while also allowing improvements to be made to the implementation.

  • Designed for Audit Logging - Unlike Log4j 1.x and Logback, Log4j 2 will not lose events during reconfiguration. Log4j 2 also supports Messages, which easily allow audit events to be flow through the framework.

  • Improved Performance - Faster performance than Log4j 1.x in critical areas and similar performance to Logback in most circumstances.

  • Support for multiple APIs - While the Log4j 2 API will provide the best performance, support for SLF4J and Commons Logging APIs are provided.

  • Automatic Reloading of Configurations - Like Logback, Log4j 2 supports filtering based on context data, markers, regular expressions and other components in the Log event and can be specified to apply to all events before being passed to Loggers or as they pass through Appenders. In addition, filters can also be associated with Loggers, Unlike Logback, a common Filter class can be used in any of these circumstances. Log4j 2 currently supports configuration via XML or JSON.

  • Plugin Architecture - All configurable components are defined as Log4j plugins. As such, no Log4j code must be changed to create a new Appender, Layout, Pattern Converter, etc. Log4j will automatically recognize properly defined plugins and use them when they are referenced in the configuration.

  • Property Support - Properties can be referenced in the configuration and either be directly replace or passed to the underlying component where they can be dynamically resolved. Properties can come from values defined in the configuration file, system properties, environment variables, the ThreadContext Map, and data present in the event. Users can further customize the property providers by adding their own Lookup Plugin

For more information see the Log4j 2 web site

Apache log4j 2.0 requires JDK 5 or later.

Sunday July 15, 2012

Website upgrade

The Apache Logging team upgraded all Logging websites to the Apache CMS. This was a huge effort for the whole team. And we were very glad we got so much help from the Apache Infrastructure and the Apache Maven team (esp. Hervé Boutemy) - thank you very much to all who spent their time.

Now we have a great new landing page, based on Twig and Twitters Bootstrap. Updates to the files are turned into plain HTML by the CMS. You can look at these files here. The Logging project does maintain several subsites. These have been included as so called "extpaths". Now it is possible for us to build our subsites with maven and copy the result to a specific svn tree. From there it is taken by the CMS and published. You can look at the subsites code here.
Most subsites are still in the "plain maven look and feel". Except the webpages for Apache log4j 2, which does already wear the layout of the fantastic Apache Maven Fluido Skin.

The Apache CMS is a pretty fabulous tool. It is extremely flexible in that you can use what it offers out of the box, you can customize it to use a different templating mechanism as we did, or you can have the system run Maven to build your site. For us, using the CMS for the main set of web pages provides us a way to quickly maintain the main part of the site while each of our subprojects is still free to generate all the build documentation Java developers have become accustomed to.

Again, we really want to that the Apache Infrastructure team for creating this tool and providing support to us along the way.

Calendar

Search

Hot Blogs (today's hits)

Tag Cloud

Categories

Feeds

Links

Navigation