1##################################################
2 Revision history for Log::Log4perl
3##################################################
4
51.15 (2008/02/10)
6    *   (ms) appender_thresholds_adjust() with a parameter of 0 now
7             does nothing (requested by Oliver Koch).
8    *   (kg) Added 'defer_connection' to Socket appender so it's more useful
9             under Apache.
10    *   (ms) [rt.cpan.org #32738] fixed caller_depth for error_warn()
11             (reported by Felix Antonius Wilhelm Ostmann)
12    *   (ms) [rt.cpan.org #32942] fixed get_logger() for subclassed Log4perl
13             (reported by Felix Antonius Wilhelm Ostmann)
14
151.14 (2007/11/18)
16    *   (ms) Fixed test suite bug which surfaced in Darwin because temporary
17             files contain '++' which freaked out the sloppy regex match.
18    *   (ms) Better handling of empty config files (reported by Robert Raisch)
19    *   (ms) Rewrote the Synchronized appender to use semaphores exclusivly
20             (got rid of IPC::Shareable).
21    *   (ms) Added Log::Log4perl::Util::Semaphore for easy semop handling
22    *   (ms) Fixed t/026FileApp.t to work on MSWin32.
23
241.13 (2007/10/11)
25    *   (ms) Another doc fix by Craig
26    *   (ms) Applied Fedora 7 patches
27    *   (ms) Added create_at_logtime option to file appender
28    *   (ms) Added trace level color (yellow) in ScreenColoredLevels
29             appender as suggested by Arvind Jayaprakash in
30             https://sourceforge.net/tracker/index.php?
31                 func=detail&aid=1791445&group_id=56939&atid=482388
32
331.12 (2007/06/23)
34    *   (ms) Added Log::Log4perl::Resurrector to resurrect commented-out
35             Log4perl statements in all subsequently loaded modules (allows
36             for deploying L4p-enabled CPAN modules without requiring L4p).
37    *   (ms) Added ALWAYS easy mode macro (level=OFF)
38    *   (ms) Fixed logconfess() frame level bug reported by Ali Mesdaq.
39             Added test case.
40
411.11 (2007/05/29)
42    *   (ms) Added PatternLayout::Multiline code by Cory Bennett to 
43             render multiline messages.
44    *   (ms) Added log level TRACE (lets through even more messages
45             than DEBUG) (suggested by Craig).
46    *   (ms) Added 'syswrite' flag to file appender to have it use
47             'syswrite' instead of 'print', avoiding buffered or
48             interleaving messages originating from different processes
49             (thanks to Evan Miller).
50
511.10 (2007/03/27)
52    *   (kg) Nikita Dedik pointed out that Saturday is missing from 
53             @Log::Log4perl::DateFormat::WEEK_DAYS
54    *   (ms) Scott Cline noticed a potential problem with the DBI
55             appender reconnection logic in 'buffered' mode. Applied
56             a patch.
57    *   (ms) Changed DBI reconnect logic to perform even if the DB
58             is pingable again.
59    *   (ms) Applied code by Valerio Valdez Paolini with modifications
60             to PropertyConfigurator.pm to allow pulling values from
61             the property configurator by path.
62
631.09 (2007/02/07)
64    *   (ms) Added $^S check to FAQ, as suggested by J. David Blackstone.
65    *   (ms) Applied Robert Jacobson's patch for the "DDD" formatter
66             in L4p::DateFormats, which now formats the day-of-year values
67             numerically and precedes them with zeroes if necessary.
68    *   (ms) Added %M{x} PatternLayout notation as requested by
69             Ankur Gupta.
70    *   (ms) Another Win32 test suite fix, no longer deleting an open
71             file but moving it aside (rt.cpan:23520).
72
731.08 2006/11/18
74    *   (ms) Applied test suite patch by Lars Thegler for 
75             ancient perl 5.005_03.
76    *   (ms) Applied patch by Jeremy Bopp to fix test suite running
77             under Cygwin.
78    *   (ms) Fixed documentation bug in L4p:Appender::File,
79             s/recreate_signal/recreate_check_signal. Thanks to
80             Todd Chapman and Robert Jacobson for reporting this.
81    *   (ms) Fixed init(), which now deletes any config file watchers 
82             left over from previous init_and_watch() calls. Reported
83             by Andreas Koenig who saw sporadic errors in the test suite, 
84             thanks!
85
861.07 2006/10/11
87    *   (ms) Removed checks for unlink() in t/017Watch.t since they
88             failed on win32.
89    *   (ms) Fixed doc bug in Appender::File reported by Robert
90             Jacobson.
91    *   (ms) Added FAQ on why to use Log4perl and not another
92             logging system on CPAN.
93    *   (ms) Fixed %M, %L, etc. level in logcarp/cluck/croak/confess
94             (thanks to Ateeq Altaf)
95    *   (ms) Autocorrecting rootlogger/rootLogger typo
96    *   (ms) Better warning on missing loggers in config sanity check
97
981.06 2006/07/18
99    *   (ms) Applied patch by Robert Jacobson to fix day-of-year in
100             DateFormat, which was off by one.
101    *   (ms) Added FAQ on syslog
102    *   (ms) umask values for the file appender are now also accepted 
103             in octal form (0xxx).
104    *   (ms) The file appender now accepts owner/group settings of
105             newly created log files.
106    *   (ms) Fixed appender cleanup, a bug caused composite appenders
107             to be cleaned up during global destruction, which caused an
108             ugly segfault with the Synchronized appender on FreeBSD.
109
1101.05 2006/06/10
111    *   (ms) Added recreate signal handler to L4p::Appender::File for
112             newsyslog support. Two new FAQ entries on dealing with 
113             newsyslog and log files being removed by external apps.
114    *   (ms) L4p::Config::Watch no longer sets the global $SIGNAL_CAUGHT by
115             default but uses an instance variable instead to prevent
116             clobbering L4p's config and watch mechanism.
117    *   (ms) die() on undefined configuration (rt 18103 by justice8@wanadoo.fr)
118    *   (ms) Hugh Esco submitted a FAQ on where to put logfiles
119    *   (ms) Applied patch provided by Chia-liang Kao to suppress an error
120             message and skip tests in the suite when DBI is missing.
121
1221.04 2006/02/26
123    *  (ms) Duplicate log4perl directives, which previously just overwrote
124            existing ones, are no longer permitted and cause the config
125            parser to throw an error.
126    *  (ms) If a conversion pattern was specified twice in a config
127            file, the output was "ARRAY(0x804da00)" (bug reported by
128            Bill Mason). Now, gobbling up property configurator values
129            into an array is limited to appender properties and
130            excludes the conversion pattern.
131    *  (ms) Multiple calls to import (usually happens if 'use L4p' gets
132            called twice within the same namespace) caused nasty warnings,
133            bug reported by Greg Olszewski. Fixed by ignoring subsequent
134            calls from the same package to import().
135    *  (ms) Changed rendering of logdie/warn/cluck/croak/... messages
136            to fix a bug reported by Martin J. Evans.
137    *  (ms) Added a L4p::Appender::String appender to handle the
138            rendering internally.
139    *  (ms) Documentation patch by Matisse Enzer on increased/
140            decreased log levels.
141    *  (ms) Fixed stack trace level of logcarp()
142    *  (ms) Carl Franks reported that the test suite failed on WinXP SP2
143            because of a hardcoded /tmp - fixed by File::Spec->tempdir().
144    *  (ms) Added reconnect_attempts and reconnect_sleep parameters to 
145            DBI appender.
146    *  (ms) Bugfix for rt.cpan.org #17886 (tmp files in test suite)
147
1481.03 (2006/01/30)
149    * (ms) Some perl-5.6.1 installations have a buggy Carp.pm. Skipping
150           4 test cases for these. Reported by Andy Ford and Matisse Enzer.
151    * (ms) The DBI appender now reconnects on stale DB connections.
152    * (ms) Fixed Win32 test bug as reported in 
153           http://rt.cpan.org/Ticket/Display.html?id=17436 by barbie.
154           Instead of deleting a file still in use by an appender (which
155           Windows doesn't like), the file gets now truncated.
156
1571.02 (2005/12/10)
158    * (ms) Adapted t/006Config-Java.t to cope with Win32 path separators
159    * (ms) Corrected typo in Chainsaw FAQ, reported by Bernd Dirksen.
160    * (ms) Brian Edwards noticed that (Screen, File) were missing a
161           base class declaration, causing $logger->add_appender() to
162           fail. Fixed with test case.
163    * (ms) Log::Log4perl::Appender::File now handles the case where the
164           logfile suddenly disappears.
165    * (ms) Fixed section indentation in main man page
166    * (ms) Converted Ceki's last name to UTF-8 (a historic step!)
167
1681.01 (09/29/2005)
169    * (ms) Added 'utf8' and 'binmode' flags to Log::Log4perl::Appender::File
170           per suggestion by Jonathan Warden.
171    * (ms) Made test cases 003Layout.t and 033UsrCspec.t resilient against
172           broken ActiveState 5.8.4 and 5.8.7.
173    * (ms) Skipped failing test cases for 5.005, looks like the caller() level
174           in carp() is wrong, but not worth fixing.
175    * (ms) Fixed the bug with the caller level of the first 
176           log message sent after init_and_watch() detected a change. Added
177           test case to 027Watch2.t.
178    * (ms) Added FAQ on UTF-8.
179    * (ms) Applied patch by David Britton, improving performance during
180           the init() call.
181    * (ms) Fixed bug https://rt.cpan.org/Ticket/Display.html?id=14776
182           to prevent it from modifying $_. Thanks to Steffen Winkler.
183
1841.00 (08/13/2005)
185    * (ms) Added tag qw(:no_extra_logdie_message) to suppress duplicate
186           die() messages in scripts using simple configurations and LOGDIE().
187           Added logexit() as an alternative way.
188    * (ms) Fixed bug with logcarp/croak/cluck, which were using the 
189           wrong Carp level.
190    * (kg) Fixing bug in Appender::Limit regarding $_ scope
191    * (ms) corrected typo in Synchronized.pm found by Rob Redmon.
192    * (ms) Fixed bug with Appender::File reported by Michael Smith. Checking
193           now if print() succeeds, catching errors with full disks and
194           ulimit'ed environments.
195    * (ms) Added LOGCARP(), LOGCLUCK(), LOGCONFESS(), LOGCROAK() macros
196           in :easy mode (suggested by Jud Dagnall).
197    * (ms) $INITIALIZED now gets reset during logger cleanup.
198
1990.52 (05/08/2005)
200    * (ms) Jonathan Manning <jmanning@alisa-jon.net> provided a patch
201           for DateFormat.pm to fix 3-letter month abbreviations and a
202           shortcut to simulate Apache's log format.
203    * (kg) Ola Finsbraaten provided a patch to provide a better error
204           message when a logger is defined twice in a config.
205
2060.51 (01/08/2005)
207    * (ms) Jon Bjornstad noticed that the file appender wasn't including
208           $! in the die() exception thrown if open_file() fails. Added it.
209    * (ms) Added umask option to file appender
210    * (ms) Fix to L4p::Util::module::available() for Win32
211           compliance by Roger Yager <roger.yager@eyestreet.com>
212    * (ms) Added check to L4p::Util::module_available() returning true
213           if the pm file is available in %INC, indicating that it has
214           already been loaded. This fixes a problem when running L4p
215           in a PAR binary.
216    * (ms) Added remove_appender() and eradicate_appender() method to 
217           Logger.pm, test cases and documentation on the main Log4perl 
218           page.
219    * (ms) Added a generic buffered composite appender, L4p::Appender::Buffer,
220           buffering messages until a trigger condition is met.
221
2220.50 (12/08/2004)
223    * (ms) Added ':resurrect' source filter, which uncomments all lines
224           starting with "###l4p". Can be used for hidden L4p statements,
225           which are then activated by calling 
226           'use Log::Log4perl qw(:resurrect)'.
227    * (ms) Fixed Win32 test suite bug: File::Spec->catfile() returns '/'
228           as a path separator on both Unix and Win32, while Log4perl's
229           layouts (derived from caller() info) use '\' on Win32 and '/' 
230           on Unix. Changed tests to only verify file name, not path.
231    * (ms) Added 'appender_by_name()' to retrieve an appender defined
232           in the configuration file by name later.
233    * (ms) Added FAQ on "stubbing out" L4p macros in environments
234           that don't have L4p installed.
235    * (ms) Added convenience function appender_thresholds_adjust() to adjust 
236           thresholds of chosen (or all) appenders
237    * (ms) Got rid of Test::Simple dependency
238    * (ms) Moved autoflush setting in L4p::Appender::File from log()
239           to file_open(), running only once, not with every message.
240    * (ms) Applied doc fixes suggested by Jon Bjornstad.
241    * (ms) Added ScreenANSIColor appender to colorize messages based on
242           their priority. See Log::Log4perl::Appender::ScreenANSIColor.
243
2440.49 (11/07/2004)
245    * (ms) init_and_watch() no longer die()s on reloading syntactically 
246           wrong configuration files but issues a warning and then 
247           reloads the last working config.
248    * (ms) init() now also accepts an open file handle (passed in as a
249           glob) to a configuration file or a ref to an IO::File object.
250    * (ms) Jos I. Boumans <kane@xs4all.net> and 
251           Chris Winters <chris@cwinters.com> reported an error thrown
252           by L4p in their app SPOPS: During global construction. Looks
253           like the Logger object's internal hash is cleared and then
254           the is_<level> method gets called, resulting in a runtime
255           exception. Added proposed remedy checking if the called
256           method is defined by ref.
257    * (ms) Added check to init_and_watch if obtaining the mod
258           timestamp failed.
259
2600.48 (08/20/2004)
261    * (ms) fixed bug reported by Chip Salzenberg <chip@pobox.com>: logdie()
262           and logwarn() are now compliant with the warn() and die() 
263           standard which suppresses the "at file line x" message if
264           the message ends with a "\n".
265    * (ms) New interface for custom config parsers. 
266           Log::Log4perl::Config::BaseConfigurator now provides a base class
267           for new config parsers. Init can now be called like
268           Log::Log4perl->init($parser) with a parser object, which is
269           derived from Log::Log4perl::Config::BaseConfigurator and 
270           provides a parse() method (no arguments). The file (or whatever)
271           to be parsed can be set by calling $parser->text(\@lines) or 
272           $parser->file($name) before calling L4p->init($parser).
273           The Property, DOM and LDAP configurators have been
274           adapted, check their implementation for details.
275    * (ms) Added integrity check for Log4perl configurations: Log4perl
276           now issues a warning if a configuration doesn't define any
277           appenders. Should anyone not like this, it can be turned
278           off by setting $L4p::Config::CONFIG_INTEGRITY_CHECK = 0
279           before calling init().
280    * (ms) Fixed bug reported by Johannes Kilian <jok@vitronic.com>
281           with __DIE__ handler and "PatternLayout" shortcut. Replaced
282           'eval { require ... }' by L4p::Util::module_available in
283           L4p::Config.pm.
284    * (ms) Did away with $IS_LOADED internal variable.
285    * (ms) Fixed bug with L4p::INITIALIZED vs. L4P::Logger::INITIALIZED,
286           added t/020Easy2.t.
287    * (ms) Added adm/cvskwexp script to check if we're running into CVS
288           trouble because of <dollar>Log keyword expansion.
289
2900.47 (07/11/2004)
291    * (ms) Added suggestion by Hutton Davidson <Davidson.Hutton@ftid.com>
292           to make the socket appender more forgiving. New option
293           "silent_recovery" will silently ignore errors and recover
294           if possible on initiallly dead socket connections.
295    * (ms) Fixed bug with initialized() -- checking once caused
296           subsequent calls to return true.
297    * (ms) run t/045Composite.t only if Storable is installed -- earlier
298           perl versions (like 5.6.1) don't have it by default.
299    * (ms) fixed test case in t/020Easy.t for buggy perl 5.6.1
300    * (ms) added Log::Log4perl::infiltrate_lwp() to make LWP::UserAgent 
301           play in the L4p framework upon request.
302    * (ms) perl 5.00503 mysteriously core dumps in t/017Watch.t, seems like 
303           this was introduced in 0.46. Disabled these tests for now
304           if we're on 5.00503 to avoid installation hickups. Longer term,
305           need to investigate.
306
3070.46 (06/13/2004)
308    * (ms) removed superfluous eval() in Log4perl.pm, reported anonymously
309           on the CPAN bugtracker.
310    * (ms) Added a cleanup() function to Logger.pm which is used by an
311           END {} block in Logger.pm to tear down all Loggers/Appenders
312           before global destruction kicks in. In addition, Kevin found 
313           that the eval "" is the cause of an Appender memleak. Moved
314           assignment variable out of the eval to plug the leak.
315           Added $Log::Log4perl::CHATTY_DESTROY_METHODS, which shows 
316           what L4p objects are destroyed and when.
317    * (ms) Kevin's idea is in now, on localizing $? in the L4p global END {} 
318           block. It prevents logdie() et. al from exiting with unwanted
319           exit codes when global cleanup / global destruction modifies $?,
320           as seen by Tim with the Email appender.
321    * (ms) Dave Viner <dviner@yahoo-inc.com> added isLevelEnabled() methods
322           as aliases to is_level().
323
3240.45 (05/23/2004)
325    * (ms) fix for t/045Composite.t on perl 5.6.1 by Jeff Macdonald 
326           <jeff.macdonald@e-dialog.com> (specify number of test cases,
327           getting rid of no_plan).
328    * (ms) Dennis Gregorovic <dgregor@redhat.com> provided a patch to 
329           protect applications who are tinkering with $/. It is set
330           to "\n" now locally when L4p is reading the conf file. Added
331           a test case to t/004Config.t.
332    * (ms) Fixed a documentation error with initialized(), pointed 
333           out by Victor Felix <vfelix@tigr.org>.
334
3350.44 (04/25/2004)
336    * (ms) added filename() method to L4P::Appender::File as suggested 
337           by Lee Carmichael <lecar_red@yahoo.com>
338    * (ms) added RRDs appender Log::Log4perl::Appender::RRDs and testcases
339    * (ms) fixed Log::Log4perl::Appender to check if a an appender package
340           has already been loaded and skip 'require' in this case. 
341           Packages injected via Class::Prototyped caused an error with this.
342    * (ms) Extended the FAQ's "How can I write my own appender?" on
343           how to dynamically create new appenders via Class::Prototyped.
344
3450.43 (03/22/2004)
346    * (ms) Applied patch by Markus Peter <warp@spin.de> for 'pipe'
347           mode in Log::Log4perl::Appender::File
348    * (ms) Added composite appender Log::Log4perl::Appender::Limit to
349           limit message delivery to adjustable time windows.
350    * (ms) Fixed last 033UsrCspec.t test case to run on Win32 as well
351           (path fixed).
352    * (ms) Lars Thegler <lars@thegler.dk> provided a patch to keep 
353           compatibility with 5.005_03.
354    * (ms) Added a patch to avoid warnings on undefined MDC values referenced
355           via %X in PatternLayout. Now, the string "[undef]" is used. Bug
356           was reported by Ritu Kohli <Ritu.Kohli@ubs.com>
357
3580.42 (02/14/2004)
359    * (kg) added filters to XML DOMConfig and DTD
360    * (ms) Fixed caller level to cspecs by adding one
361    * (ms) Added init_once() and documentation
362    * (ms) Worked around the perl bug that triggers __DIE__ handlers
363           even if die() occurs within an eval(). So if you did
364             BEGIN { $SIG{__DIE__} = sub { print "ouch!"; die }; }
365             use Log::Log4perl;
366           and Time::HiRes wasn't available, the 
367             eval { require Time::HiRes }
368           in PatternLayout.pm triggered the __DIE__ handler. Now there's
369           a function module_available() in L4p::Util to check if a 
370           module is installed.
371    * (ms) Fixed %M cspec in PatternLayout in case a logging
372           method is called within one (or more) eval {} block(s). 
373           caller(n+m) will be called repeatedly if necessary
374           to get the next real subroutine. Anonymous subroutines will 
375           still be called __ANON__, but this can be overridden by 
376           defining
377               local *__ANON__ = "subroutine_name";
378           in them explicitely (thanks, Perlmonks :).
379
3800.41 (12/12/2003)
381    * (ms) Applied documentation update for Synchronized appender, suggested
382      by David Viner E<lt>dviner@yahoo-inc.comE<gt>
383    * (ms) Added option to Log::Log4perl::Layout::PatternLayout to 
384      enable people to provide their own timer functions.
385
3860.40 (11/11/2003)
387    * (ms) perl 5.005_03 fix for l4p::Appender::Synchronized
388    * (ms) Fixed a bug in 0.39 (thanks to James King for finding) which
389      caused composite appenders like Synchronized to just use 
390      SimpleLayout. With the fix, composite appenders are now relaying
391      messages unmodified to their delegates, which can then apply 
392      any layout they desire.
393    * (ms) Added file_open(), file_close() and file_switch() to 
394      l4p::Appender::File
395
3960.39 (10/23/2003)
397    * (kg) fixed bug in interaction between Logger::Level and Level::is_valid
398      so that now you can do $logger->level('INFO') instead of just $INFO.
399    * (ms) Added logic for 'composite appenders'. Appenders can now be
400      configured to relay messages to other appenders. Added 
401      Log::Log4perl::Appender::Synchronized, an appender guaranteeing 
402      atomic logging of messages via semaphores.
403    * (ms) Added basic substitution to PropertyConfigurator. Now you can
404      define variables (like in "name=value") and subsequent patterns
405      of "${name}" will be replaced by "value" in the configuration file.
406    * (kg) Followed Mike's lead and added variable substitution to the 
407      DOMConfigurator.
408    * (ms) Added Log::Log4perl::Appender::Socket as a simple Socket
409      appender featuring connection recovery.
410
4110.38 (09/29/2003)
412    * (kg) fixed bug where custom_levels beneath DEBUG didn't work
413    * (ms) fixed 5.00305 incompatibility reported by 
414      Brett Rann <brettrann@mail.com> (constants with leading _).
415    * (ms) Log::Log4perl->easy_init() now calls ->reset() first to make sure
416      it's not duplicating the existing logging environment. Thanks
417      to William McKee <william@knowmad.com> for bringing this up.
418    * (ms) fixed bug with error_die() - printed the wrong function/line/file.
419      Reported by Brett Rann <brettrann@mail.com>.
420    * (ms) added %T to PatternLayout as a stack traced as suggested by
421      Brett Rann <brettrann@mail.com>.
422
4230.37 (09/14/2003)
424    * (kg) adjusting tests for XML::Parser 2.32 having broken
425      XML::DOM 1.42 and lower
426    * (ms) Added signal handling to init_and_watch
427    * (ms) renamed l4p-internal DEBUG constant to avoid confusion with
428      DEBUG() and $DEBUG as suggested by Jim Cromie <jcromie@divsol.com>.
429    * (ms) Applied patch by Mac Yang <mac@proofpoint.com> for 
430      Log::Log4perl::DateFormat to calculate the timezone for the 'Z'
431      conversion specifier.
432
4330.36 (07/22/2003)
434    * (ms) Matthew Keene <mkeene@netspace.net.au> suggested to have
435      an accessor for all appenders currently defined -- added 
436      appenders() method
437    * (ms) Test case 041SafeEval.t didn't share $0 explicitely and
438      created some warnings, fixed that with (jf)'s help.
439    * (ms) Added performance improvements suggested by
440      Kyle R. Burton <mortis@voicenet.com>. is_debug/is_info/etc.
441      are now precompiled, similar to the debug/info/etc. methods.
442    * (ms) Added a fix to have is_debug()/is_info()/etc. pay
443      attention to on-the-fly config file changes via init_and_watch().
444    * (ms) Fixed bug that reloaded the config under init_and_watch()
445      every time the check period expired, regardless if the config
446      file itself had changed. Added test case.
447
4480.35 06/21/2003
449    * (kg) got rid of warnings during make test in 014ConfErrs.t
450           added user-defined hooks to JavaMap
451    * Jim Cromie <jcromie@divsol.com> provided a patch to get
452      rid of deprecated our-if syntax in Level.pm
453    * (ms) removed test case for RollingFileAppender because of recent
454      instability. Added dependency for Log::Dispatch::RollingFile 1.10
455      in Log/Log4perl/JavaMap/RollingFileAppender.pm.
456
4570.34 06/08/2003
458    * (ms) James FitzGibbon <james.fitzgibbon@target.com> noticed a major
459           bug in Log::Log4perl::Appender::File and provided a patch. Problem
460           was that 0.33 was reusing the same file handle for every opened file,
461           causing all messages to end up in the same file.
462
4630.33 05/30/2003
464    * (kg) CPAN rt#2636, coordinating XML::DOM version required across modules
465           and unit tests
466    * (ms) Removed Log::Dispatch dependency, added standard 
467           Log::Log4perl::Appender appenders File and Screen. 
468           Log::Dispatch is still supported for backwards compatibility
469           and special purpose appenders implemented within this hierarchy.
470
4710.32 05/17/2003
472    * (ms) Added fix to Makefile.PL to compensate for MakeMaker bug
473           in perl < 5.8.0, causing man pages below Log::Log4perl::Config 
474           not to be installed. Thanks to Mathieu Arnold <mat@mat.cc> 
475           for bringing this up.
476    * (ms) 0.31 had a Win32 test suite glitch, replaced getpwuid() 
477           (not implemented) by stat() for Safe test.
478
4790.31 05/08/2003
480    * (kg) fixed bug Appender::DBI where it was consuming the message
481           array before other appenders could get to it
482    * (ms) changed config_and_watch to ignore clock differences between
483           system time and file system time (helpful with skewed NFS 
484           systems). Added Log::Log4perl::Config::Watch.
485    * James FitzGibbon <james.fitzgibbon@target.com>: Added support for
486           optionally restricting eval'd code to Safe compartments. 
487    * (ms) allow/deny code in configuration files should now be controlled 
488           via the accessor Log::Log4perl::Config->allow_code(0/1).
489           $Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE is still supported
490           for backwards compatibility.
491
4920.30 03/14/2003
493    * (ms) Added Log4perl custom filter logic and standard filter set
494    * (kg) Added url support to init(), finally documenting it
495    * (kg) Finished implementation of DOMConfigurator allowing xml configs.
496    * (ms) Corrected DateFormat inconsistencies as reported by
497           Roger Perttu <roger.perttu@easit.se>
498
4990.29 01/30/2003
500    * (kg) Removing debugging from 0.28, big woops
501    * (kg) Fixing 036JSyslog.t, Syslog implementations are too often broken
502           to base any results on.
503    * (kg) Fixing XML-DOM tests, Data::Dumper doesn't return data exactly the
504           same way.
505
5060.28 (01/28/2003)
507    * (ms) '#' in the conf file are now interpreted as comment starters only
508           if they're at the start of a line with optional whitespace. 
509           The previous setting (comments starting anywhere) had problems 
510           with code containing '#''s, like in layout.cref = sub { $#_ = 1 }
511    * (ms) warp_message accepts code refs or function names
512    * (kg) Split config bits into PropertyConfigurator and implemented
513           DOMConfigurator for XML configs.
514    * (kg) Adding appender.warp_message parameter as a help to DBI 
515           appender
516    * (kg) Added NoopLayout to help DBI appender
517    * (ms) Added message output filters:
518           log({filter => \&filter, value => $value})
519    * (kg) t/024WarnDieCarp was assuming / as directory separator, failed
520           on Win32
521    * (kg) implemented JavaMaps for NTEventLogAppender, SyslogAppender
522    * (kg) found and addressed circular ref problem in Logger->reset
523    * (kg) moved TestBuffer under Appender/ directory along with DBI
524    * (kg) fixed docs, Pattern layout, %f not supported, s/b %F
525    * (kg) added Log::Log4perl::Appender::DBI to implement JDBCAppender
526    * (ms) Every value in the config file can now be a perl function,
527           dynamically replaced by its return value at configuration
528           parse time
529    * (ms) NDC now prints entire stack, not just
530           top element (as mandated by Log4j)
531    * (ms) Allow trailing spaces after a line-breaking '\' in the 
532           config file to be fault-tolerant on cut-and-pasted code
533
5340.27 12/06/2002
535    * (ms) Updated FAQ with "Recipes of the Week"
536    * (ms) Added Log::Log4perl::NDC (Nested Diagnostic Contexts) and
537           Log::Log4perl::MDC (Mapped Diagnostic Contexts)
538    * (ms) LOGDIE and LOGWARN added to stealth loggers
539    * (ms) Logging methods ($lo->debug(), $lo->info() ...) now return
540           a value, indicating the number of appenders that the message
541           was propagated to. If the message was suppressed due to level
542           constraints, undef is returned. Updated manpage (new section
543           "return values").
544    * (ms) Fixed bug reported by Francisco Olarte Sanz. 
545           <folarte@peoplecall.com>: ISO date format and documentation mixed 
546           up MM with mm in the simple date format
547    * (kg) User-defined conversion specifiers for PatternLayout in
548           configuration file and as C API
549    * (kg) implementing map to log4j.RollingFileAppender
550    * (kg) trying out oneMessagePerAppender parameter
551    * (kg) changed unit tests to use File::Spec 
552
5530.26 11/11/2002
554    * (kg) enabled %l (was missing from PatternLayout::define)
555    * (kg) got rid of "Use of uninitialized value in join or string" message
556           when some of $logger->debug(@array) when some of @array are undef 
557    * (ms) Stealth loggers and documentation
558    * (kg) Better error message for case reported by Hai Wu
559    * (ms) Added Log/Log4perl/FAQ.pm, which the homepage links to
560    * (ms) Took dependency on Test::More and Test::Simple out of the PPD file 
561           because of a problem with Activestate 5.6.1 reported 
562           by James Hahn <jrh3@att.com> 
563    * (ms) Added Log::Dispatch equivalent levels to the Log4perl loggers,
564           which are passed on the Log::Dispatch appenders now according
565           to the priority of the message instead of the default "DEBUG" 
566           setting
567    * (ms) Added %P process ID to PatternLayout as suggested by
568           Paul Harrington <Paul-Harrington@deshaw.com>. Also added 
569           %H as hostname
570    * (kg) Added %min.max formatter to PatternLayout
571    * (ms) Updated docs for Log::Log4perl::DateFormat
572
5730.25 10/06/2002
574    * (ms) backwards-compatibility with perl 5.00503
575    * (ms) added system-wide threshold, fixed java-app thresholds
576    * (kg) Nested configuration structures for appenders like L::D::Jabber
577    * (ms) ::Log4perl::Appender::threshold() accepts strings or integer
578           levels (as submitted by Aaron Straup Cope <asc@vineyard.net>)
579    * (ms) Fixed logdie/logwarn caller(x) offset bug reported by 
580           Brian Duffy <Brian.Duffy@DFA.STATE.NY.US>
581    * (ms) dies now on PatternLayout without ConversionPattern (helps detecting
582           typos in conf files)
583
5840.24 09/26/2002
585    * (kg) Fix for init_and_watch and test cases
586    * (ms) Added documentation for Log::Log4perl::Config
587    * (ms) Added log4perl.additivity.loggerName conf file syntax
588    * (ms) Assume Log::Log4perl::Layout prefix of 'relative'
589           layout class names in conf file (say 'SimpleLayout'
590           instead of 'Log::Log4perl::Layout::SimpleLayout').
591    * (ms) accidently appending a ';' at the end of an appender
592      class in a conf file now spits out a reasonable error message
593    * (ms) added a by_name() method to TestBuffer to retrieve an
594           instance of the TestBuffer population by name instead of
595           relying on the order of creation via POPULATION[x] 
596           (for testing only).
597    * (kg) Win32 compatibility fixes
598
5990.23 09/14/2002
600    * Both Log4perl/log4perl is now accepted in conf file
601    * Added documentation to Log::Log4perl::Appender
602    * Made Time::HiRes optional. If it's missing, PatternLayout will
603      just use full seconds as %r.
604    * SimpleDateFormat "%d{HH:SS}", including predefined formats (DATE etc.)
605    * Added another cut-and-paste example to the docs (EXAMPLE)
606    * Added new logdie/logwarn/error_warn/error_die/logcarp/
607      logcluck/logcroak/logconfess functions written by 
608      Erik Selberg <erik@selberg.com>
609    * Added PatternLayout documentation
610    * Changed suppression of duplicate newline in log message algorithm
611    * Custom levels and inc_level/dec_level/more_logging/less_logging
612      added by Erik Selberg <erik@selberg.com>
613    * Append to logfile by default if Log::Dispatch::File is used
614      (previously clobbered by default)
615    * Kevin's init_and_watch fix
616
6170.22 8/17/2002
618    * Threshold settings of appenders: 
619        $appender->threshold($ERROR);
620        log4j.appender.A.Threshold = ERROR
621    * Chris R. Donnelly <cdonnelly@digitalmotorworks.com>
622      submitted two patches: 
623      - extended init() to take obj references (added, also added a test
624        case and documentation)
625      - fixed %F and %L if Log4perl is used by a wrapper class (accepted,
626        but changed variable name to Log::Log4perl::caller_depth as
627        a tribute to Log::Dispatch::Config, added test case 022Wrap
628        and documentation
629
6300.21 8/08/2002
631    * Synopsis shows code samples in Log4perl.pm/README
632    * Slight Log4j incompatibility but useful: %F{n} lets you
633      limit the number of entries the source file path is logged
634    * Erik W. Selberg (erik@selberg.com) suggested having PatternLayout.pm
635      suppress another \n if the messages already contains a \n and the
636      format requires a %n. Done.
637    * Erik W. Selberg (erik@selberg.com) suggested loggers should take
638      any number of messages and concatenate them. Done.
639    * Fixed double-init problem and added a test case. Now the entire
640      configuration is cleared before the second init(). However, this
641      surfaced a problem with init_and_watch: If a program obtains
642      references to one or more loggers, rewriting the configuration
643      file during program execution and re-initing makes these reference
644      point to loggers which hold obsolete configurations. Fixed that by
645      code in debug(), info(), etc. which *replaces* (shudder) the
646      logger reference the program hands in to them with a new one of
647      the same category. This happens every time if 'init_and_watch' has
648      been enabled. However, this introduces a small runtime penalty.
649      This is different from the original log4j, which does some
650      half-assed re-initialization, because Java isn't expressive enough
651      to allow for it. Making this thread-safe might be tough, though. 
652    * Added DEBUG statements to Logger.pm and Config.pm to trace execution
653      (debugging won't work because of "eval"s). Both files define a 
654      constant named DEBUG towards the top of the file, which will
655      have perl optimize away the debug statements in case it's set to 0.
656    * A warning is issued now (once) if init() hasn't been called or
657      no appenders have been defined.
658    * Added ':levels' target to Log::Log4perl to import $DEBUG, $ERROR,
659      etc. levels (just like 'use Log::Log4perl::Level' works).
660    * Added ':easy' target to allow for simple setup
661    * Code references can be passed in as log messages to avoid parameter
662      passing penalty
663
6640.20 7/23/2002
665    * Strip trailing spaces in config file
666    * Accept line continuations in properties file
667    * Refactored Logger.pm for speed, defined the logging behavior when 
668      the logger is created, not when a message is logged
669    * Fixing test suites so that SimpleFormat newline is accounted for
670    * Fixed a bug with root inheritance where the category name wasn't
671      coming through
672    * added init_and_watch
673
6740.19 07/16/2002
675    * Added Log::Log4perl::Appender::TestBuffer back in the distribution, otherwise
676      regression test suite would fail.
677
6780.18 07/16/2002
679    * Failed attempt to fix the Log::Dispatch::Buffer problem.
680
6810.17 07/11/2002
682    * Updated documentation according to Dave Rolsky's suggestions
683    * Lots of other documentation fixes
684    * Fixed bug in renderer, %M was displayed as the logger function
685      bumped up the level by 1
686    * Fixed %% bug
687
6880.16 07/10/2002
689    * Updated documentation for CPAN release
690    * Applied Kevin's patch to limit it to one Log::Dispatcher
691
6920.15 07/10/2002
693    * There were name conflicts in Log::Dispatch, because we used *one*
694      Log::Dispatch object for the *all* loggers in the Log::Log4perl
695      universe (it still worked because we were using log_to() for
696      Log::Dispatch to send messages to specific appenders only). Now
697      every logger has its own Log::Dispatch object. Logger.pm doesn't
698      call Kevin's anti-dupe logic anymore -- is this ok? Maybe there's
699      some leftovers which need to be cleaned up.
700    * Kevin fixed t/014ConfErrs.t after last night's Appender.pm change
701
7020.14 07/09/2002
703    * (!) Added new class Log::Log4perl::Appender as a wrapper around
704      Log::Dispatch::*. Layouts are no longer attached to the loggers,
705      but to the appenders instead. $app->layout($layout) sets the
706      layout. $logger->add_appender($app) is the new syntax to add
707      an appender to a logger. The $logger->layout method is gone
708      for that reason.
709    * Added documentation on categories
710    * Added documentation on Log::Log4perl::Appender,
711      Log::Log4perl::Layout::SimpleLayout,
712      Log::Log4perl::Layout::PatternLayout.
713
7140.13 07/09/2002
715    * in the config files, 'debug' is not a level, 'DEBUG' is
716    * expanded the layouts so that we can add subclassess, added
717      SimpleLayout, note that api usage changes
718      -$logger->layout('buf',"The message is here: %m");
719      +$logger->layout(new
720      Log::Log4perl::Layout::PatternLayout('buf',"The message is
721      here: %m"));
722    * did benchmarks, see doc/benchmark*, t/013Bench.t
723    * further tweaked errors for bad configuration, added a test for those
724
7250.12 07/08/2002
726    * Log::Log4perl::Logger->get_logger now accessible via 
727      Log::Log4perl->get_logger()
728    * Log::Log4perl::Config->init now accessible via 
729      Log::Log4perl->init()
730    * Adapted test cases to new shortcuts
731    * Constrained some files to 80 chars width
732    * Added test case t/009Deuce.t for two appenders in one category
733      via the config file
734    * Changed default layout in case there's none defined (SimpleLayout)
735    * Implemented dictatory date format for %d: yyyy/MM/dd hh:mm:ss
736
7370.11 07/07/2002
738    * added documentation to Log/Log4perl.pm
739    * added is_debug/is_error/is_info etc. functions to Logger.pm,
740      test cases to t/002Logger.t
741
7420.10 07/05/2002
743    * %p should return level name of the calling function, so 
744      $logger->warn('bad thing!!') should print 'WARN - bad thing'
745      even if the category is set to debug, so took level_str out of
746      Logger.pm (kg)
747
7480.09 07/03/2002
749    * %p should return level name, not number, adding level_str to Logger.pm (kg)
750    * Level.pm - discriminating: priorities are 1-4, levels are
751      'info','debug',etc (kg)
752
7530.08  07/03/2002
754    * Non-root loggers are working now off the config file
755
7560.07  07/02/2002
757    * Updated documentation
758    * removed "diagnostics"
759
7600.06  07/01/2002
761    * Bug discovered by Kevin Goess <cpan@goess.org>, revealed
762      in 004-Config.t: Wrong layout used if Appender is inherited.
763      Fixed.
764    * Changed Log::Log4perl::Appender::TestBuffer to keep track of the
765      object population -- so we can easily reference them
766      in the Log::Log4perl test cases. Got rid of get_buffer().
767    * Added a reset() method to Log::Log4perl and Log::Log4perl::Logger
768      for easier testing. It resets all persistent loggers to 
769      the inital state.
770    * Added documentation
771
7720.05  06/30/2002
773    * Fixed bug with mapped priorities between java/Log::Dispatch
774    * Java/Perl integration with conf file
775
7760.04  06/30/2002
777    * Layout tests
778    * %r to layout
779    * Added lib4j configuration file stuff and tests
780
7810.03  06/30/2002
782    * Layout
783    * Curly braces in Layout first ops
784
7850.02  06/30/2002
786    * Created Logger and test cases
787
7880.01  06/22/2002
789    * Where it all began
790
791TODO (not assigned to anybody yet):
792##################################################
793    * objects passed via the config hash are stringified by Config.pm
794      (requires a significant change on how to init via a hash ref,
795       something like a HashConfigurator class)
796    * BasicConfigurator() vs. :easy, PropertyConfigurator()
797    * get_logger() thread safety (two try to create it at the same time)
798    * Thread safety with appenders, e.g. two threads calling the 
799      File::Dispatch appender's log method
800    * Thread safety with re-reading the conf file (watch)
801    * Object rendering
802    * log4j.logger.blah = INHERITED, app
803    * variable subst: a=b log4j.blah = ${a}
804    * log4j.renderer.blah = blah
805    * permission problems, init() creates the files, maybe read later by
806      different uid, no way to set umask?
807    * Custom filters
808
809TODO Kevin:
810##################################################
811    * use squirrel  http://www.perlmeister.com/scripts/squirrel?
812    * document oneMessagePerAppender as a bona-fide feature
813    * appender-by-name stuff?
814    * implement? #"log4j will render the content of the log message according to 
815            # user specified criteria. For example, if you frequently need 
816            # to log Oranges, an object type used in your current project, 
817            # then you can register an OrangeRenderer that will be invoked 
818            # whenever an orange needs to be logged. "
819         
820                
821TODO Mike:
822##################################################
823    * index.html on sourceforge should be part of CVS
824    * Release script should maintain old CPAN message on index.html
825    * Turning on DEBUG in Logger.pm results in broken test cases and
826      warnings
827    * Layout.pm: '%t'
828    * README tests (Pod::Tests or something)
829    * Just had a wild idea: Could we possibly utilize the compiler
830      frontend to eliminate log statements that are not going to be
831      triggered? This would be a HUGE performance increase!
832    * Write a bunch of useful appenders for Log::Dispatch like 
833      RollingLogFile
834
835##################################################
836