2012-06-25 20 views
5

google-closure kitaplığı, çoğu geliştiricinin aşina olması gereken bir logging system içerir. Bu güzel. Ne yazık ki, aldığınız çıktı, bazı tarayıcılar/eklentiler tarafından kullanılabilir olarak console.log kullanıldığı zamanki gibi daha az etkileyici. Örneğin, console.log(window), Chrome'da yazıyorsanız, konsol, etkileşimli olarak inceleyebileceğiniz bir nesneyi gösterecektir. Google-closure logger'ı kullanırken bunu yapmayacaktır. Dahili olarak sadece nesnenizin dize temsilini console.log'a geçireceğini varsayalım. Yani çok fazla rahatlık kaybedersin.Goog.debug.Logger` (`console.log` gibi) için daha iyi çıktı almak mümkün mü?

Bu nedenle, hala console.log'u kullanmaya devam ediyorum. Ancak, kötü şanslar varsa, bunu üretim kodundan kaldırmayı unutursanız, kodunuz console.log (f.ex .: IE) içermeyen tarayıcılarda bozulur.

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

ya:

Alternatif olarak, örneğin, ilk varoluş kontrol ederek, bu karşı korumak mümkündür

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

Ancak her iki çözümler mükemmel olmaktan uzaktır. Ve, kütüphanesinin kayıt çerçevesine sahip olduğu göz önüne alındığında, bunu kullanabilmek güzel olurdu. Şu anda olduğu gibi, console.log'u çok daha kullanışlı buluyorum.

Benim soru (tl/dr): Ben x bir dize temsilini kullanarak yerine bunun myLogger.info(x) yazarken google-kapama kullanıcıyı console.log(x) yapabilir miyim?

cevap

5

Ayrıca, günlüğü göstermek için ayrı bir pencereye sahip olmak için goog.debug.FancyWindow'u da kullanabilirsiniz. Daha fazla bilgi için google kapatma demo sayfası sayfasına bakın: https://github.com/google/closure-library/blob/master/closure/goog/demos/debug.html ve kaynak koduna bakın.

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

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

Bu:

sadece konsol günlüğünü kullanıyorsanız diğer avantajı çerçeve otomatik Sadece konsol günlüğünü kullanmak folowing satırları ekleyin ... modül adı ve saati prepend olmasıdır üretim kodunda konsol günlüğünü göstermeyi de engeller.

Selamlar,

Rene

+0

kritik bit 'goog.debug.expose' oldu. İlk olarak, kayıt çerçevesinin belgelerine baktığımda bunu özledim! Etkileşimli 'console.log' dökümü kadar uygun olmasa da, bu çoğu durumda iyi olur. Yani teşekkürler! – exhuma

+0

Bu cevaptaki kodun hatalara neden olacağından korkuyorum. 'Goog.debug.Console' ifadesini kullandığınızda hemen 'goog.require ...' – hguser

2

Google Kapatma ihtiyacınıza göre bilgi sağlayabilir. Fonksiyonuyla, nesne işlevleri olmadan. Aşağıdaki kod snippet'ine bakın. Aradığım

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' kullanmanız faydalıdır. Hala konsol.log'dan elde ettiğiniz çıktı kadar kullanışlı değil. – exhuma

İlgili konular