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

Apache Log4net was voted to dormant status on April 1, 2020. Dormant status
indicates that the project is not being actively maintained, that no future
releases are planned and, most likely, there are few or no developers left
in the Apache Logging project familiar with this code base. 

If you wish to use any of this library you must build it yourself and should
assume that no future releases will be forthcoming.

Introduction
===========

Apache Log4net was voted to dormant status on April 1, 2020. No patches or 
further releases are planned, however if enough people commit to 
maintain the project in the future it is possible

Apache log4net is a sub project of the Apache Logging Services project. 
Apache log4net graduated from the Apache Incubator in February 2007.
Web site: http://logging.apache.org/log4net


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

Contributing
============

log4net development happens on the logging dev mailing list, see
<https://logging.apache.org/log4net/mail-lists.html>.  Please join the
mailing list and discuss bigger changes before working on them.

For bigger changes we must ask you to sign a Contributor License
Agreement <http://www.apache.org/licenses/#clas>.

github pull requests are one way to contribute, The Apache issue
tracker is no longer accepting new issues but is available at 
<https://issues.apache.org/jira/browse/LOG4NET> for access to 
previous issues. 

