2012-06-25 9 views
5

La libreria google-closure contiene anche uno logging system che dovrebbe essere familiare alla maggior parte degli sviluppatori. Questo è carino. Sfortunatamente, l'output ottenuto è meno espressivo come quando si utilizza console.log come reso disponibile da alcuni browser/plug-in.È possibile ottenere un output migliore per `goog.debug.Logger` (come` console.log`)?

Ad esempio, se si scrive console.log(window) in Chrome, la console visualizzerà un oggetto che è possibile ispezionare interattivamente. Quando si utilizza il registratore di chiusura di google, non lo farà. Suppongo che passerà internamente semplicemente una rappresentazione di stringa dell'oggetto a console.log. Quindi perdi molta convenienza.

Per questo motivo, continuo a utilizzare console.log. Ma poi, se per sfortuna, ti dimentichi di rimuoverlo dal codice di produzione, il tuo codice si romperà nei browser che non hanno console.log (es .: IE).

In alternativa, è possibile evitare questo problema, verificando l'esistenza prima, per esempio:

window.console && window.console.log && console.log(...) 

o:

if (DEBUG) { 
    console.log(...) 
} 

Ma entrambe le soluzioni sono ben lungi dall'essere perfetto. E, dato che la libreria ha un framework di registrazione, sarebbe bello poterlo usare. Come è adesso, trovo lo console.log molto più utile a volte.

Quindi la mia domanda (TL/dr): Posso fare utente google-chiusura console.log(x) quando scrivo myLogger.info(x) invece di esso utilizzando una stringa-rappresentazione di x?

risposta

5

È inoltre possibile utilizzare goog.debug.FancyWindow per disporre di una finestra separata per mostrare la registrazione. Vedi per maggiori informazioni la pagina demo di chiusura di google: https://github.com/google/closure-library/blob/master/closure/goog/demos/debug.html e guarda il codice sorgente.

Un altro vantaggio se si sta usando solo la registrazione della console è che il quadro sarà anteporre automaticamente il nome del modulo e il tempo ... Basta aggiungere le linee folowing per utilizzare la registrazione console:

goog.require('goog.debug.Console'); 

if (goog.DEBUG) { 
    debugConsole = new goog.debug.Console; 
    debugConsole.setCapturing(true); 
} 

Questo impedirà inoltre di mostrare la registrazione della console nel codice di produzione.

saluti,

Rene

+0

Il bit critica che cercavo era 'goog.debug.expose'. L'ho perso quando ho iniziato a esaminare i documenti del framework di registrazione! Sebbene non sia conveniente come il dump interattivo 'console.log', questo andrà bene per la maggior parte dei casi. Quindi grazie! – exhuma

+0

Ho paura che il codice in questa risposta causi errori. Dato che usi 'goog.debug.Console' immediatamente dopo averlo importato,' goog.require ... ' – hguser

2

Google Chiusura in grado di fornire le informazioni secondo le specifiche necessità. Con funzione, senza funzioni dell'oggetto. Fai riferimento allo snippet di codice seguente.

goog.require('goog.debug'); 
goog.require('goog.debug.Logger'); 

var theLogger = goog.debug.Logger.getLogger('demo'); 
theLogger.info('Logging examples'); 

// Create a simple object. 
var someone = { 
    'name': 'peder', 
     'age': 33, 
     'gender': 'm', 
     'kids': ['hari', 'sam', 'sneha'] 
}; 

// Show the object, note that it will output '[object Object]'. 
theLogger.info(someone); 

// Use expose to walk through the object and show all data. 
theLogger.info('Person: ' + goog.debug.expose(someone)); 


// Does not show the functions by default. 
theLogger.info('expose (no functions): ' + goog.debug.expose(yourObject)); 


// Shows the functions as well. 
theLogger.info('expose (w/functions): ' + goog.debug.expose(yourObject, true)); 

// Show deepExpose, which walks recursively through data. 
theLogger.info('deepExpose (no functions): ' + goog.debug.deepExpose(yourObject)); 

theLogger.info('deepExpose (w/functions): ' + goog.debug.deepExpose(yourObject, true)); 
+0

' goog.debug.expose' è utile. Ancora non è utile come l'output che si ottiene da 'console.log'. – exhuma

Problemi correlati