2013-09-04 3 views
0

Я пытаюсь использовать log4javascript и задавался вопросом, есть ли способ загрузить PopupAppender по требованию.Можете ли вы загрузить PopupAppender по запросу?

Я ищу функциональность так же, как в браузере, где в моем приложении будет значок, который указывает, что что-то было зарегистрировано, и когда я нажимаю на него, открывается PopupAppender и позволяет мне просматривать журналы.

Я думаю, что могу написать свой собственный очень простой appender, чтобы показать значок, если есть ошибки, но я не уверен, как я могу загрузить PopupAppender и показать исторические сообщения?

ответ

1

Вы должны иметь какой-то прокси-приложение, как вы предлагаете, которое хранит сообщения о регистрации и создает PopUpAppender по требованию. Что-то вроде этого:

Демо: http://jsfiddle.net/hDRpT/

Код:

function OnDemandPopUpAppender() { 
    this.popUpAppender = new log4javascript.PopUpAppender(); 
    this.poppedUp = false; 
    this.popperUpperDisplayed = false; 
    this.queuedLoggingEvents = []; 
} 

var proto = new log4javascript.Appender(); 
OnDemandPopUpAppender.prototype = proto; 

proto.appendQueued = function() { 
    for (var i = 0, loggingEvent; loggingEvent = this.queuedLoggingEvents[i++];) { 
     this.popUpAppender.append(loggingEvent); 
    } 
    this.queuedLoggingEvents.length = 0; 
}; 

proto.popUp = function() { 
    this.poppedUp = true; 
    this.appendQueued(); 
}; 

proto.append = function(loggingEvent) { 
    var appender = this; 
    this.queuedLoggingEvents.push(loggingEvent); 

    if (this.poppedUp) { 
     this.appendQueued(); 
    } else if (!this.popperUpperDisplayed && 
      loggingEvent.level.isGreaterOrEqual(log4javascript.Level.ERROR)) { 
     var popperUpper = document.createElement("div"); 
     popperUpper.style.border = "solid red 2px"; 
     popperUpper.innerHTML = "There are error messages in the log. Click to open."; 
     popperUpper.onclick = function() { 
      appender.popUp(); 
     } 
     document.body.appendChild(popperUpper); 
     this.popperUpperDisplayed = true; 
    } 
}; 

var log = log4javascript.getLogger("main"); 
log.addAppender(new OnDemandPopUpAppender()); 

log.debug("A debug message"); 
log.error("A horrible error!"); 
Смежные вопросы