Short Description
=================

log4cplus is a simple to use C++ logging API providing thread-safe,
flexible, and arbitrarily granular control over log management and
configuration.  It is modeled after the Java log4j API.


Latest Project Information
==========================

The latest up-to-date information for this project can be found at
http://log4cplus.sourceforge.net.  Please submit bugs, patches,
feature requests, etc. there.


Current Status
==============

This library has now reached "Production" status.


Tested on the following platforms
=================================

- Linux/AMD64 with GCC 4.1.2 and 4.3.2
- FreeBSD/i386 and AMD64 with GCC 3.4.6, 4.2.1 and 4.3.3
- Windows XP with MS Visual C++ 8.0, 9.0 and 10.0
- OpenSolaris 5.11 with Sun C++ 5.10 SunOS_i386 128229-02 2009/09/21,
  with -library=stlport4


Notes
=====

Cygwin/MinGW
------------

Some version of GCC (3.4.x and probably some of 4.x series too) on
Windows (both Mingw and Cygwin) produces lots of warnings of the form
"warning: inline function 'void foo()' is declared as dllimport:
attribute ignored."  This can be worked around by adding
-Wno-attributes option to GCC command.  Unfortunatelly, not all
affected version of GCC have this option.


Threads and signals
-------------------

log4cplus is not safe to be used from async signals' handlers.  This
is a property of most threaded programmes in general.  If you are
going to use log4cplus in threaded application and if you want to use
log4cplus from signal handlers then your only option is to block
signals in all threads but one that will handle all signals.  On POSIX
platforms, this is possible using the sigwait() call.  log4cplus
enables this approach by blocking all signals in any threads created
through its threads helpers.


AIX
---

There appears to be a reentracy problem with AIX 5.3 and xlC 8 which
can result into a deadlock condition in some curcumstances. It is
unknown whether the problem manifests with other versions of either
the OS or the compiler, too. The problem was initially reported in a
bug report #3056687 ([1]).

The core of the problem is that IBM's/xlC's standard C++ IOStreams
implementation uses global non recursive lock to protect some of its
state. The application in the bug report was trying to do logging
using log4cplus from inside overflow() member function of a class
derived from std::streambuf class. log4cplus itself uses
std::ostringstream. This resulted into an attempt to recursivly lock
the global non recursive lock and a deadlock.

[1] <https://sourceforge.net/tracker/?func=detail&aid=3056687&group_id=40830&atid=429073>


Unsupported compilers
---------------------

log4cplus does not support too old and broken C++ compilers:

- Visual C++ prior to 7.1
- GCC prior to 3.2
- All Borland/CodeGear/Embarcadero C++ compilers


Unsupported platforms
---------------------

log4cplus requires some minimal set of C and/or C++ library
functions. Some systems/platforms fail to provide these functions and
thus log4cplus cannot be supported there:

- Windows CE - missing implementations of <time.h> functions


License
=======

This library is licensed under the Apache Public License 2.0 and two
clause BSD license.  Please read the included LICENSE file for
details.
