File: index.html

package info (click to toggle)
log4cpp-doc 0.3.5-rc3-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 5,664 kB
  • ctags: 925
  • sloc: makefile: 34
file content (456 lines) | stat: -rw-r--r-- 20,920 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
  <title>Log for C++</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="GENERATOR" content="Quanta Plus">
  <link HREF="default.css" TYPE="text/css" REL="STYLESHEET" >
</head>
<body>
<div align="center"><h1>Log for C++</h1></div>
<h2>Introduction</h2>
<p>
Log4cpp is library of C++ classes for flexible logging to files, syslog, IDSA and other destinations.
It is modeled after the <a href="http://jakarta.apache.org/log4j">Log4j</a> Java library, staying as close to their API as is reasonable.
</p>

<h2>Download</h2>
<p>
Sources are available from SourceForges <a href="http://sourceforge.net/project/showfiles.php?group_id=15190">download page</a>.<br>
We do not supply binaries yet, because of the numerous incompatible ABIs (e.g. g++ 2.95 vs 2.96 vs 3.0 vs 3.2) and different package
formats.<br>
An older version of log4cpp (0.2.5) is available in Debian stable,
see <a href="http://packages.debian.org/stable/libs/liblog4cpp0.html">http://packages.debian.org/stable/libs/liblog4cpp0.html</a>.<br>
FreeBSD users can find log4cpp (0.2.7) in the ports collection,
see <a href="http://www.freebsd.org/ports/devel.html#log4cpp-0.2.7">http://www.freebsd.org/ports/devel.html</a><br>
The people of the <a href="http://datagrid.in2p3.fr/">Datagrid Project Central Repository</a> have published the source and binary RPMs
they use theirselves. These are for RedHat Linux 6.2.<br>
Pascal Bleser has built RPMs for SuSE Linux and made them available at <a href="http://guru.unixtech.be/rpm/packages/Development/log4cpp/">http://guru.unixtech.be/rpm/packages/Development/log4cpp/</a><br>
Log4cpp includes support for building RPMs, so building your own from the source tar-ball is as simple as
<pre>
rpm -ta log4cpp-x.y.z.tar.gz
</pre>
</p>

<h2>Building Log4cpp</h2>
<p>
As of version 0.2.0 log4cpp can be build using autoconf on platforms that support it. Simply do:
<pre>
./configure
make
make check
make install
</pre>
<p>This will install log4cpp under /usr/local. To install in another localation specify --prefix=&lt;location&gt; when running configure.
</p>

<h3>Options for ./configure</h3>

Besides the usual ./configure options like --prefix a few others are available:
<dl>
<dt>--with-idsa</dt>
<dd>Include support for logging to IDSA (<a href="http://jade.cs.uct.ac.za/idsa/index.html">http://jade.cs.uct.ac.za/idsa/index.html</a>).
This will give you an IdsaAppender Appender class.</dd>
</dl>
<dl>
<dt>--with-omnithreads[=&lt;path-to-omniORB&gt;]</dt>
<dd>Enable multi-threading support using omniORB4's omniThreads MT abstraction library (http://www.omniorb.org).
configure expects the omnithread header files to reside in &lt;path-to-omniORB&gt;/include and the library in
&lt;path-to-omniORB&lt;/lib, i.e. not in a platform specific subdirectory. Create symlinks where necessary.<br>
NB. omniORB4 is required: omniORB3 will not suffice as it lacks sufficient support for thread specific data.
At the moment (August 2002) omniORB4 is in beta, however most parts and specifically the threading
library appear to be quite stable.
</dd>
</dl>

<dl>
<dt>--with-pthreads</dt>
<dd>Enable multi-threading support using the 'pthread' POSIX threads library.
This option is mutually exclusive with --with-omnithreads.<dd>
</dl>

<dl>
<dt>--enable-doxyen</dt>
<dd>Enables generation of API documentation by Dimitri van Heeschs Doxygen tool
(http://www.doxygen.org/). Defaults to yes if doxygen can be found in the
search path.</dd>
</dl>

<dl>
<dt>--enable-html-docs</dt>
<dd>If doxygen is enabled, have it generate HTML formatted documentation.</dd>
</dl>

<dl>
<dt>--enable-latex-docs</dt>
<dd>If doxygen is enabled, have it generate LaTeX formatted documentation.</dd>
</dl>

<dl>
<dt> --enable-dot</dt>
<dd>Let Doxygen use the 'dot' tool of GraphViz (<a href="http://www.graphviz.org/">http://www.graphviz.org</a>) todraw its graphs.</dd>
</dl>

</p>

<h3>Build notes for specific platforms</h3>

<dl>
<dt>*nix - g++ compiler</dt>
<dd>Log4cpp should build whitout modification on any decent *nix system with g++ and GNU make. The primary development platform is
RedHat Linux 7.3, which has g++ 2.96-rh, but the aim is to be compatible with from g++ 2.95 and up. When g++ 3.x has been widely
adopted we may drop support for older g++ versions.</dd>
</dl>
<dl>
<dt>Solaris - Sun CC compiler</dt>
<dd>Compilation with Suns CC compiler requires setting some enviroment variables.
Also static libraries appear not to work. In short do:
<pre>
CC=CC CXX=CC LD="CC -KPIC" ./configure --disable-static
</pre>
</dd>
</dl>

<dl>
<dt>Win32 - MSVC++ 6</dt>
<dd>Use the workspace and project files in subdirectory msvc6.
You may need to adjust include/log4cpp/config-win32.h and the project files to your particular needs.</dd>

<dl>
<dt>Win32 - MSVC++ 5</dt>
<dd>Building log4cpp with MSVC++ 5 is not supported and will not be,
unless someone can find a way to do so without mutilating the source code.</dd>
</dl>

<dl>
<dt>Win32 - Borland C++ Builder 5</dt>
<dd>Use the project and make files in subdirectory bcb5.</dd>
</dl>

<dl>
<dt>Win32 - Cygwin</dt>
<dd>Use './configure; make; make install'.<br>
Be warned that there have been very few success or failure reports for this platform,
so either it works very smoothly or noone actively uses log4cpp with Cygwin :-)
</dd>
</dl>

<dl>
<dt>OpenVMS<dt>
<dd>Edit include/log4cpp/config-openvms.h if you need different settings.<br>

This has been tested on OpenVMS Alpha v7.3 and Compaq C++ V6.3-020 only.
</dd>
<dd>1) Copy the src and include directory (including all its contents and subdirectories) onto your OpenVMS system.</dd>
<dd>2) Compile each source file (*.CPP and *.C in the src directory) one by one by the following command,
<pre>
cxx /include=("/a1\$dkb0/user/tony/project/log4cpp/include") /define=(__USE_STD_IOSTREAM,__OPENVMS__) /repository=a1$dkb0:[user.tony.project.log4cpp.repository] APPENDER.CPP
cxx /include=("/a1\$dkb0/user/tony/project/log4cpp/include") /define=(__USE_STD_IOSTREAM,__OPENVMS__) /repository=a1$dkb0:[user.tony.project.log4cpp.repository] APPENDERSKELETON.CPP
</pre>
...etc<br>

Please substitute a correct path for your include directory. A unix-style directory name is requied in the /include parameter.
In this example, the pathis A1$DKBO:[USER.TONY.PROJECT.LOG4CPP.INCLUDE]<br>

A repository directory is also specified here as A1$DKB0:[USER.TONY.PROJECT.LOG4CPP.REPOSITORY].<br>
<dd>3) Create a static library, LOG4CPP.OLB
<pre>
lib/create log4cpp
</pre>
</dd>
<dd>4) Put all compiled OBJ files into the LOG4CPP.OLB
<pre>
lib/insert log4cpp appender
lib/insert log4cpp appenderskeleton
</pre>
...etc<br>
</dd>
<dd>5) Link a program with log4cpp.olb. e.g:
<pre>
cxx /include=("/a1\$dkb0/user/tony/project/log4cpp/include") /define=(__USE_STD_IOSTREAM,__OPENVMS__) testlog4cpp.cxx

cxxlink /repository=a1$dkb0:[user.tony.project.log4cpp.repository] testlog4cpp,log4cpp/library
</pre>
</dd>
</dl>

<h2>Releases</h2>
<p>
WARNING: releases from the development branch are a 'work in progress' and may fail to build, crash or redecorate your desktop.

<dl>
<dt>0.3.4b - development branch (29 October 2002)</dt>
<dd>Fixed builds for MSVC6 and MSVC7 this time, honestly :-).</dd>
</dl>

<dl>
<dt>0.3.4 - development branch (28 October 2002)</dt>
<dd>Fixed builds for MSVC6 and MSVC7.</dd>
<dd>Removed Log4cppCleanup.</dd>
</dl>

<dl>
<dt>0.3.3 - development branch (26 October 2002)</dt>
<dd>Fixed #628211: build failure on MSVC 6.0.</dd>
<dd>Fixed #625811: log facility in RemoteSyslogAppender.</dd>
<dd>Possibly fixed #415160: crashes with dynamic library on Solaris 2.6.</dd>
<dd>Replaced PatternLayout with a new, faster and more complete implementation.</dd>
</dl>

<dl>
<dt>0.3.2 - development branch (5 October 2002)</dt>
<dd>Fixed #614903: compilation problem on Sun CC 5.3.</dd>
<dd>Added missing MSVC6 .dsp files.</dd>
<dd>Fixed log facility in RemoteSyslogAppender.</dd>
<dd>Fixed relocatability of log4cpp-devel RPM.</dd>
<dd></dd>
</dl>

<dl>
<dt>0.3.2rc5 - development branch (5 October 2002)</dt>
<dd>Merged #604991: support for setting additivy in PropertyConfig.</dd>
<dd>Merged #605143: support for compilation in QNX Neutrino.</dd>
</dl>

<dl>
<dt>0.3.2rc4 - development branch (16 August 2002)</dt>
<dd>Fixed last minute goof ups which prevented compilation on both *nix and Win32 platforms.</dd>
</dl>

<dl>
<dt>0.3.2rc2 - development branch (12 August 2002)</dt>
<dd>Added support for POSIX threads.</dd>
<dd>Added PropertyConfigurator.</dd>
<dd>Rearranged documentation.</dd>
<dd>Fixed various bugs.</dd>
</dl>

<dl>
<dt>0.3.2rc1 - development branch (19 June 2002)</dt>
<dd>Support for Win32 threads added.</dd>
<dd>Added NTEventLogAppender.</dd>
<dd>Added Win32DebugAppender.</dd>
<dd>Fixed NDC context problem if depth > 2.</dd>
<dd>Added aclocal support.</dd>
</dl>

<dl>
<dt>0.3.1 - development branch (4 April 2002)</dt>
<dd>Added RollingFileAppender class.</dd>
<dd>Fixed bug #572467: invalidated iterator usage.</dd>
<dd>Fixed bug #527475: format string bug.</dd>
<dd>Fixed bug #530332: missing 'std::' specifiers.</dd>
<dd>Handled feature requests #536668, #527760, #527381.</dd>
</dl>

<dl>
<dt>0.3.0 - development branch (18 Februari 2002)</dt>
<dd>Added experimental support for multi threaded applications. This implementation uses omniORB4s threading library.
Other threading libraries, such as Boosts, may be used as well, but this has not been implemented yet.</dd>
</dl>

<dl>
<dt>0.2.7 - stable branch (27 Januari 2002)</dt>
<dd>Support for multiple Appenders per Category added (feature request #501360).</dd>
<dd>Fixed variable scope bug in SyslogAppender (bug #499315)</dd>
<dd>Fixed memory leak in SyslogAppender and RemoteSyslogAppender (bug #499524)</dd>
<dd>Fixed compile problem in Filter (bug #)</dd>
<dd>Fixed config file parse problem in SimpleConfigurator (bug #500766)</dd>
<dd>Added methods for logging at FATAL level (bug #504314)</dd>
<dd>Fixed Win32 compile problem (bug #506907)</dd>
</dl>

<dl>
<dt>0.2.6 (11 December 2001)</dt>
<dd>Preliminary support for OpenVMS added.</dd>
<dd>PatternLayout, SimpleConfigurator and RemoteSyslogAppender added.</dd>
</dl>

<dl>
<dt>0.2.5 (11 June 2001)</dt>
<dd>Inclusion of support for Borland C++ Builder.</dd>
<dd>Library version 1.0.0: this release is not binary compatible with previous ones. (Version update should have been done in 0.2.4).</dd>
</dl>

<dl>
<dt>0.2.2 (04 March 2001)</dt>
<dd>Inclusion of Win32 platform (MSVC++ 6.0)</dd>
</dl>

<dl>
<dt>0.2.1 (15 Februari 2001)</dt>
<dd>license change to LGPL.</dd>
</dl>

<dl>
<dt>0.2.0 (10 December 2000)</dt>
<dd>log4cpp now uses autoconf and automake.</dd>
</dl>
</p>

<h2>CVS</h2>
<p>Log4cpp is also available directly through CVS, see the <a href="http://sourceforge.net/cvs/?group_id=15190">SourceForge CVS page</a> for instructions.
CVS currently has two branches:
</p>
<p><table>
<tr><td>MAIN</td><td>for log4cpp development</td></tr>
<tr><td>BRANCH_MAINT_0_2</td><td>for maintainance of log4cpp-stable (0.2.x)</td></tr>
</table><br>
Each release will receive a tag named REL_x_y_z.
</p>
<p>To start working with a freshly checked out log4cpp revision, run ./autogen.ssh first. This will create ./configure and the necessary Makefile.in's. You'll need at least autoconf 2.50, automake 1.6.0 and libtool 1.4.
</p> 

<h2>Documentation</h2>
<p>API Documentation generated by <a href="http://www.doxygen.org/" name="Doxygen">Doxygen</a> can be found
<a href="api/index.html">here</a>.<br>
The <a href="Solaris Developer Connection">Solaris Developer Connection</a> features an article by Mo Budlon on using
log4cpp 0.2.x, called '<a href="http://soldc.sun.com/articles/logging.html/">Logging and Tracing in C++ Simplified</a>'.
Recommended reading if you trying to figure out how to use log4cpp!
</p>
<h2>FAQ</h2>

<h3>1. GENERAL</h3>
<h4>1.1. What is Log for C++?</h4>
Log for C++ is a library of C++ classes for flexible logging to files, syslog and other destinations. It is modeled after the Log for Java
library (http://jakarta.apache.org/log4j/), staying as close to their API as is reasonable.

<h4>1.2. How is Log for C++ related to Log4j? Is it a straight port?</h4>
Log for C++ strives to supply a similar interface for logging in C++ as Log4j provides in Java. However the implementation is not a
translation of the Java code. So in that sense it is not a 'port' of Log4j. Of course Log for C++ does owe many of its concepts to log4j.

<h4>1.3. What is the name of this project, 'Log for C++' or 'log4cpp'?</h4>
The 'official' long name of the project is 'Log for C++', but in practice, the short name, 'log4cpp' has proven more convinient.

<h4>1.4. Under which license is Log for C++ available?</h4>
As of version 0.2.1 Log for C++ is released under the GNU Lesser General Public License (LGPL).
Versions before that have been released under the GPL. See the license discussion on the forum at SourceForge
for the motivations behind switching from GPL to LGPL.

<h4>1.5. Our legal department doesn't like the LGPL, can you release Log for C++ under license XYZ?</h4>
No.<br>
Long answer: Technically it may be possible if every contributor agrees, which due to their growing number has become increasingly
difficult. But even if that could be overcome it will not happen.<br>
Of course the LGPL does grant you the opportunity to choose the GPL instead of the LGPL, but I bet XYZ != GPL.

<h3>2. COMPILATION AND INSTALLATION</h3>

<h3>3. USAGE</h3>
<h4>3.1. I've succesfully compiled log4cpp, now how do I use this stuff?</h4>
For some small examples using log4cpp, see the 'tests' subdirectory. Also see the documentation section for a pointer for API documentation
and more usage information.

<h4>3.2. Is log4cpp thread-safe?</h4>

<h3>4. PROBLEMS AND ERROR MESSAGES</h3>
<h4>4.1. I get 'Naming collision for 'ERROR' detected. Please read the FAQ for a workaround.'</h4>
This is caused by the rudeness of some platforms, which mutilate the namespace with some blunt #defines. To be more precise,
the Win32 API includes #defines of 'ERROR' and 'DEBUG'. Since the preprocessor is unaware of C++ naming scopes this results in
reserving the words ERROR and DEBUG litterally everywhere. In particular this conflicts with log4cpp::Prioritiy::ERROR and
log4cpp::Priority::DEBUG. These latter two names come from log4j, so they are not something we made up ourselves.<br>
They Win32 authors should not have rudelessly claimed these generic names through the preprocessor. There are much better alternatives:
<ol>
<li>If they use it as an integer constant, declare it using a language construct.
Either '<tt>enum {ERROR=1};</tt>' or '<tt>static const int ERROR=1;</tt>' would do fine.</li>
<li>Use a less generic name like WIN32API_ERROR to make naming conflicts less likely</li>
<li>In case they use it as a flag for conditional compilation, use '<tt>#define DEBUG DEBUG</tt>' and '<tt>#if defined(DEBUG)</tt>'.
In that case the preprocessor would simply replace all occurrences of 'DEBUG' in the source code with 'DEBUG', in effect leaving
everything intact.</li>
</ol>
<p>Of course the proper solution would be if the offending party would use one of the above methods, but we could have to wait
some time for this to actually happen. As an alternative log4cpp can workaround these #defines. The workaround code is enabled by
doing <tt>#define LOG4CPP_FIX_ERROR_COLLISION 1</tt> before #including any log4cpp header files and after #including all
platform headers. For Win32 platforms this #define has already been included in log4cpp/config-win32.h.
</p>
<p>Once log4cpp has been updated to the log4j 1.2 API we can get rid of this problem by adopting the new names for log levels.
</p>

<h4>4.2. I am trying to compile/link the log4cpp package using the SunWorkshop compiler (CC) on a Solaris 7 machine.
The library builds, but the testmain code fails to link properly.</h4>

A proper solution for this problem has not been found yet (suggestions are welcome),
but James Emery reported success with the following workaround:
 <ul>
<li>Disable building of the static library</li>
<li>Change the linker from /usr/ucb/ld to CC and enable 'place independent code' (pic).</li>
</ul>
In short, configure with:<br>
<pre>export LD="CC -Kpic" && ./configure --disable-static</pre>

<h4>4.3. ./configure fails to detect 'snprintf()' on platform XYZ.</h4>
./configure does not just check for the presence of a snprintf() function but for C99 compliancy as well. In particular, snprintf()
should strictly honour the 'string size' parameter to avoid potential buffer overflow problems.
log4cpp falls back to an <a href="http://www.ijs.si/software/snprintf/">alternative snprintf() implementation</a> if the OS does not provide a correct one.

<h2>Status</h2>
<p>As of version 0.3.0 log4cpp has a separate 'stable' and 'development' branches.
Releases x.y.z where y is even are considered stable and those where y is odd are experimental
(which means that some or all features may be broken).</p>
<p>The latest stable release 0.2.7. New releases of 0.2.x are for bug fixes only, new features will go into 0.3.x and eventually 0.4.x.</p>

<h2>People</h2>
<p>Coding on Log4cpp was initiated by me (Bastiaan Bakker) late 2000. Since then other people have joined the project or contributed code:
<table>
<tr><td>Cedric Le Goater &lt;cedric(at)legoater.com&gt;</td><td>autoconf setup, various improvements</td></tr>
<tr><td>Marc Welz &lt;marc(at)jade.cs.uct.ac.za&gt;</td><td>IdsaAppender</td></tr>
<tr><td>Lynn Owen &lt;opl(at)agoby.com&gt;</td><td>MSVC++ support</td></tr>
<tr><td>Steve Ostlind &lt;s.ostlind(at)pentasafe.com&gt;</td><td>MSVC++ support, various fixes</td></tr>
<tr><td>Marcel Harkema &lt;marcel(at)debian.org&gt;</td><td>Debian packaging</td></tr>
<tr><td>Uwe Jger &lt;jaeger(at)varial.de&gt;</td><td>Borland C++ Builder support</td></tr>
<tr><td>Walter Stroebel &lt;walter.stroebel(at)lifeline.nl&gt;</td><td>RemoteSyslogAppender</td></tr>
<tr><td>Glen Scott &lt;glen_s(at)yahoo.com&gt;</td><td>PatternLayout, SimpleConfigurator</td></tr>
<tr><td>Tony Cheung &lt;dragonman(at)asiayeah.com&gt;</td><td>OpenVMS support</td></tr>
<tr><td>Alex Tapaccos &lt;ATapaccos(at)redfig.com&gt;</td><td>DailyRollingFileAppender</td></tr>
<tr><td>Brendan B. Boerner &lt;bboerner(at)texas.net&gt;</td><td>Multiple Appender support for Categories</td></tr>
<tr><td>Paulo Pizarro &lt;paulo.pizarro(at)digitro.com.br&gt;</td><td>RollingFileAppender</td></tr>
<tr><td>David Resnick &lt;dresnick(at)mobilespear.com&gt;</td><td>NTEventAppender, integration work</td></tr>
<tr><td>Aaron Ingram &lt;ai8(at)yahoo.com&gt;</td><td>MSThreads support</td></tr>
<tr><td>Alan Anderson &lt;alan(at)rushmore.com&gt;</td><td>Win32DebugAppender, PropertyConfigurator</td></tr>
<tr><td>Emiliano Martin &lt;emilianomc(at)terra.es&gt;</td><td>PThreads support</td></tr>
</table>
</p>

<h2>Project Pages</h2>
<p>
<table border="0">
<tr><td><a href="http://sourceforge.net"> <img src="sflogo.png" align="left" border="0" alt="SourceForge Logo"></a></td>
<td>Log4cpp is hosted on <a href="http://sourceforge.net/">SourceForge<a> at <a href="http://sourceforge.net/projects/log4cpp/">http://sourceforge.net/projects/log4cpp/</a>.</td></tr>
</table>
</p>
<h2>Related Projects</h2>
<p>Log4cpp is but one of many ports/implementations of the Log4j API. Here's an incomplete list:
  <table>
     <tr><td><a href="http://log4c.sourceforge.net"><b>log4c</b></a></td><td>An implementation in C by Cedric Legoater</td></tr>
     <tr><td><a href="http://log4cplus.sourceforge.net/"><b>log4cplus</b></a></td><td>An indepent C++ implementation by Tad Smith.
     Worth checking out if you don't like Log4cpp for some reason.</td></tr>
   </table></p>
</body>
</html>

<h2>License</h2>
<p>As of version 0.2.1 this library is licensed under the Lesser General Public License instead of the General Public License.
No further license changes are planned :-). </p>

<pre>
Log for C++ (short name: log4cpp), a C++ library for flexible logging.
Copyright (C) 2000-2002 LifeLine Networks bv
Copyright (C) 2000-2002 Bastiaan Bakker
Portions Copyright others, see file THANKS and source code.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
</pre>

</body>
</html>