2

I'm looking into using a javascript logging framework in my app.

I quite like the look of log4javascript (http://log4javascript.org/) but I have one requirement which I'm not sure that it satisfies.

I need to be able to ask the framework for all messages which have been logged.

Perhaps I could use an invisible InPageAppender (http://log4javascript.org/docs/manual.html#appenders) to log to a DOM element, then scrape out the messages from that DOM element - but that seems pretty heavy.

Perhaps I need to write my own "InMemoryAppender"?

M.Babcock
  • 18,753
  • 6
  • 54
  • 84
dbruning
  • 5,042
  • 5
  • 34
  • 35

1 Answers1

3

There's an ArrayAppender used in log4javascript's unit tests that stores all log messages it receives in an array accessible via its logMessages property. Hopefully it should show up in the main distribution in the next version. Here's a standalone implementation:

var ArrayAppender = function(layout) {
    if (layout) {
        this.setLayout(layout);
    }
    this.logMessages = [];
};

ArrayAppender.prototype = new log4javascript.Appender();

ArrayAppender.prototype.layout = new log4javascript.NullLayout();

ArrayAppender.prototype.append = function(loggingEvent) {
    var formattedMessage = this.getLayout().format(loggingEvent);
    if (this.getLayout().ignoresThrowable()) {
        formattedMessage += loggingEvent.getThrowableStrRep();
    }
    this.logMessages.push(formattedMessage);
};

ArrayAppender.prototype.toString = function() {
    return "[ArrayAppender]";
};

Example use:

var log = log4javascript.getLogger("main");
var appender = new ArrayAppender();
log.addAppender(appender);
log.debug("A message");
alert(appender.logMessages);
Tim Down
  • 318,141
  • 75
  • 454
  • 536
  • Awesome, thanks Tim. Looking forward to that next version. I've done something home-baked & very light-weight in the meantime. – dbruning Apr 03 '12 at 02:37