There are basically two big concerns regarding logging in fred:
- Readability and code clutter, which was my original questioning;
- Raw throughput, as raised by toad.
Point 1 could mostly be solved by removing any traces of logMINOR and
logDEBUG on all but the few places where generating messages to be
logged brings noticeable slowdown. That'd be enough, but, personally,
the mess that the logging backend is does warrant a replacement.
According to toad, the current system needs log{MINOR,DEBUG} to function
in a timely manner. Based on this, I think we all agree a replacement is
desirable.
Logging has a few additional requirements:
- Log rotation (possibly live);
- Reentrant;
- Per-class filtering;
- Specific information in log (class-name, for example).
Now, _any_ library which fits would make me happy, as long as they agree
to two points:
- Either lightweight or with optional features. Else, it would only
transfer bloat to freenet-ext.jar. For example: log2socket, config
management and multiple logging instances;
- Implementable in a few LoC. Specially, it shouldn't need specialized
Formatter and Writer.
Plus, it should be fast.
From the quick research I made (yep, too many lists):
- SLF4J already fails on point one: it is simply a wrapper;
- The Java logging API fails on point two: specialized classes would
have to be written to deal with log rotation, per-class filtering and
formatting, plus a wrapper for Logger.{info,warning,...}() methods.
Exactly the same as a custom logger, with one more dependency and using
more LoC;
- Log4J seems to fail on point one - it only lacks a button that brings
back the dead. It seems interesting, and I haven't dropped this yet.
In either case (custom or external), log* would be banished. Forever.
On 21-03-2012 13:47, Ian Clarke wrote:
> Is there a good reason to roll our own logging framework? What about
> http://www.slf4j.org/ or one of the many other alternatives?
>
> Ian.
>
> On Sun, Mar 18, 2012 at 6:40 PM, Marco Schulze
> <marco.c.schulze at gmail.com <mailto:marco.c.schulze at gmail.com>> wrote:
>
> One thing has been bothering me: those 'if (logMINOR)
> Logger.minor(...', and the mess that logging is inside fred. I've
> written a very simple replacement for Logger + associated classes
> with the following changes:
>
> - Log level (renamed to severity) filtering is done by Logging.log();
> - Specific writer classes are replaced by a simple OutputStream,
> which defaults to System.err. Formatting is also unified;
> - Severity cases are broadened (FATAL, ERROR, WARNING, INFO, DEBUG
> and TRACE), MINOR is mapped to DEBUG, and NORMAL is mapped to INFO;
> - No logging method accepts an Object parameter - hashCode() is
> not exactly useful.
>
> Additionally, log rotation will be moved outside (possibly inside
> Node).
>
> Currently, the log format is '<severity>\t<message>'.
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
>
>
>
> --
> Ian Clarke
> Personal blog: http://blog.locut.us/
>
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20120321/4ec159d9/attachment.html>