Project Status
==============

log4net is an effort undergoing incubation at the Apache Software Foundation 
(ASF), sponsored by the Apache Logging Services project. Incubation is required 
of all newly accepted projects until a further review indicates that the 
infrastructure, communications, and decision making process have stabilized in 
a manner consistent with other successful ASF projects. While incubation status 
is not necessarily a reflection of the completeness or stability of the code, 
it does indicate that the project has yet to be fully endorsed by the ASF.


Documentation
=============

For local documentation, which is correct for this release see:
doc/index.html

For the latest documentation see the log4net web site at:
http://logging.apache.org/log4net
