I don't get why people think Log::Log4perl is a module is to "conditionally appending a single line of text to a file". If you think so, you completely miss the point of Log::Log4perl. What about having fatal errors sent to your email? Log something to SNMP or Windows Event Log? Configure your few-hundred-module project logging using just one file? Log::Log4perl can easily handle all that stuff. Your precious "open && print && close"? I doubt so. And yes, Log::Message cannot handle these things either.
Log4j was introduced to the world as a great example of how to over-engineer a very trivial problem. This module has brought that same level of needless complexity to perl. In a nutshell, this module uses 1.3MB of code to accomplish the most common usage scenario: conditionally appending a single line of text to a file. Additionally, the construction process can be needlessly complicated.
It's a very mature and an excellent logging framework. However, some of the common minor complaints are: 1) It's too complex. I agree: it should not be this hard to get started. 2) Configuration is too verbose. Agreed: but well, what can you do, most things from Java is a bit overengineered and verbose anyway. At least you can do almost anything with the configuration. 3) It's not very Perlish. Also agreed. 4) Performance. My note: speed is not an issue in majority of the cases and Log4perl's performance is adequate for most of the rest of the cases. For faster/leaner alternatives you might want to take a look at Log::Fast, but a lot of Log4perl's features are missing.
One of the main strengths of Log4perl is its sublogger/subcategory feature, which few other frameworks seem to have.
For other alternatives, also take a look at: Log::Handler, Log::Any. And of course Log::Message too.
One of the best modules on CPAN! Very well-documented, easy to use, yet powerful and flexible. IMO, it should be included in future Perl distros as logging is simply a crucial part of any serious software application.
Intuitive, simple to impliment, easy to override, hidden depths of power and flexability, wrapped up in a clear and well-documented object model.
You can get up and running in seconds, but know that because of the module's rich feature set and built-in extensibility, your application will probably not outgrow this module.
Logging to the screen, logging to a filehandle, logging to files, appending to files, in any number of formats: the built-in sprintf functionality of pattern layout means that log files become legible and almost pleasurable!
Logging can be performed at different levels (as in Apache logging), optionally with different actions set up for each level. Logging can be turned on, off or restricted to specific packages or to errors above or below a specific level, through adjustment of either a configuration file or Perl value. And wonders of wonders, it is simple to configure different logging levels for different Perl namespaces.
Plus logging to a simple callback for database inserts.
And what's more, the author is very helpful.
A rare 10/10: a module that makes me unusually proud to program in Perl.
This is an excellent package, BUT... it's a lot of work to set up the configuration for it. There's a fair bit of documentation to read to figure it out.
For a system of applications which use shared configuration information, this is worth using because a sysadmin can update logging information without touching source code--one can control what subsystems at a set level of granularity are logged (and to where).
But for most cases, I think using a simpler package such as Log::Dispatch will suffice. (It's the basis for Log::Log4perl anyway.) One can easily upgrade from Log::Dispatch to Log4perl if requirements become more complicated.
This module is a flexible framework that deserves the name: it does not unduly impose any particular style of use on you, and makes it very easy to do trivial things. The API scales easily and seamlessly from 10-liners to 100,000 LOC projects.
An excellent, sophisticated logging package with a good pedigree, being based off the widely used Log4j java logging package. The only minor problem is the documentation, which is huge and can be slightly confusing. Nevertheless, an essential module for large scale application development.