2012-02-14 6 views
24

Czy można rozszerzyć obiekt konsoli?Czy mogę przedłużyć obiekt konsoli (w celu przekierowania rejestrowania) w javascript?

Próbowałem coś takiego:

Console.prototype.log = function(msg){ 
    Console.prototype.log.call(msg); 
    alert(msg); 
} 

Ale to nie działa. Chcę dodać dodatkowe logowanie do obiektu konsoli za pomocą struktury takiej jak log4javascript i nadal używać standardowego obiektu konsoli (w przypadkach, gdy log4javascript nie jest dostępny) w moim kodzie.

Z góry dziękuję!

+2

dlaczego rozszerzasz obiekt prototypowy zamiast rozszerzać sam obiekt 'Console'? Czy kiedykolwiek nazywasz 'new Console()'? – biziclop

Odpowiedz

35

Spróbuj następujący:

(function() { 
    var exLog = console.log; 
    console.log = function(msg) { 
     exLog.apply(this, arguments); 
     alert(msg); 
    } 
})() 
2

Można dodać również zalogować Czas W ten sposób:

dodano Momentjs lub użyj Nowa data() zamiast chwili.

var oldConsole = console.log; 
console.log = function(){ 
    var timestamp = "[" + moment().format("YYYY-MM-DD HH:mm:ss:SSS") + "] "; 
    Array.prototype.unshift.call(arguments, timestamp); 
    oldConsole.apply(this, arguments); 
}; 
0
// console aliases and verbose logger - console doesnt prototype 
var c = console; 
c.l = c.log, 
c.e = c.error, 
c.v = c.verbose = function() { 
    if (!myclass || !myclass.verbose) // verbose switch 
     return; 
    var args = Array.prototype.slice.call(arguments); // toArray 
    args.unshift('Verbose:'); 
    c.l.apply(this, args); // log 
}; 

// you can then do 
var myclass = new myClass(); 
myclass.prototype.verbose = false; 
// generally these calls would be inside your class 
c.v('1 This will NOT log as verbose == false'); 
c.l('2 This will log'); 
myclass.verbose = true; 
c.v('3 This will log'); 

ja zauważyć, że powyższa wykorzystanie Array.prototype.unshift.call przez Nitesh jest lepszym sposobem dodania 'Verbose:' tag.

Powiązane problemy