Bir GWT uygulamasında hata ayıklama yapıyorum ve test amacıyla konsola bazı şeyler yazdırmam gerekiyor. System.out.println
ve GWT.log
çalışmıyor. Herhangi bir fikri olan var mı?
Yanıtlar:
Belgelerden alıntı yapmak:
GWT günlüğünü eklemek, aşağıdaki kod örneği kadar basit, gerçekten oldukça basittir. Ancak - günlüğe kaydetmenin nasıl çalıştığını ve doğru şekilde nasıl yapılandırılacağını anlamak önemlidir, bu nedenle lütfen bu belgenin geri kalanını okumak için zaman ayırın.
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
Günlük kaydını etkinleştirmenin en basit yolu şudur:
# In your .gwt.xml file
<inherits name="com.google.gwt.logging.Logging"/>
# In your .java file
Logger logger = java.util.logging.Logger.getLogger("NameOfYourLogger");
logger.log(Level.SEVERE, "this message should get logged");
Bunu PhoneGap (ve gwt-phonegap) aracılığıyla bir Android cihazına / öykünücüsüne dağıtılan bir GWT uygulaması bağlamında yapmam gerekiyordu. Ne System.out.println () ne de yukarıdaki gibi GWT günlüğü (modül bildirimi ile) Android'in logcat'inde görünmedi, bu yüzden console.log için basit bir JSNI sarıcıya başvurdum:
public void onModuleLoad()
{
Logger logger = Logger.getLogger("Test1.java");
logger.log(Level.INFO, "ash: starting onModuleLoad (1)"); // not in logcat
System.out.println( "ash: starting onModuleLoad (2)" ); // not in logcat
consoleLog( "ash: starting onModuleLoad (3)" ); // This shows up
...
}
native void consoleLog( String message) /*-{
console.log( "me:" + message );
}-*/;
GWT 2.6.0 sürümünde, GWT.log yöntemi mesajı tarayıcı konsoluna yazar, yerel yöntemler yazmanıza gerek yoktur.
Tarayıcı konsolunda oturum açmak için bunu yerel kullanarak çok basit bir şekilde yapabilirsiniz. Hata ayıklamada çok yardımcı.
Aşağıdaki gibi yerel bir yöntem eklerseniz, ona istediğiniz yerden bir dize gönderebilirsiniz ve tarayıcı konsolunda oturum açacaktır.
public static native void console(String text)
/*-{
console.log(text);
}-*/;
GWT'de yerel kullanımı hakkında daha fazla bilgi için: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
Sadece mreppy ve Strelok yanıtlarında gösterilen farklı olasılıkları bir pasajda özetlemek . Ayrıca, burada açıklandığı gibi IE istisnaları için olası bir geçici çözüm ekledim: JavaScript, IE'de geliştirici araçlarını yalnızca bir kez açtıktan sonra neden çalışıyor?
java.util.logging.Logger logger = Logger.getLogger(this.getClass().getSimpleName());
native void jsConsoleLog(String message) /*-{
try {
console.log(message);
} catch (e) {
}
}-*/;
private void log(final String message) {
// Logs to Dev mode console only
GWT.log(message);
// Logs to Dev mode and JavaScript console (requires configuration)
this.logger.log(Level.FINEST, message);
// Logs to JavaScript console only
jsConsoleLog(message);
Yerel konsolu kullanan başka bir varyasyon ...
Bu sınıfı ekleyin:
package XXX.XXX.XXX.XXX;
public class Debug {
private static boolean isEnabled_ = false;
public static void enable() { isEnabled_ = true; }
public static void setEnabled( final boolean isEnabled )
{ isEnabled_ = isEnabled; }
public static void log( final String s )
{ if( isEnabled_ ) nativeConsoleLog( s ); }
private static native void nativeConsoleLog( String s )
/*-{ console.log( s ); }-*/;
}
Ardından, uygulamayı başlatırken olduğu gibi bir noktada onunla hata ayıklamayı etkinleştirin:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
Öyleyse sadece böyle kullanın:
Debug.log("Hello World!");
Ben de bu sorunu yaşadım. GWT günlüğü çalışır, ancak tümü javascript'e dönüştürüldüğü için istemci çıktısına yazdırır, bu nedenle tarayıcınızın konsolunu görüntüleyin ve orada olurlar. Google Chrome'da sağ üstteki üç satırlı Özelleştir düğmesini tıklayın, Araçlar -> Geliştirici araçları'nı tıklayın; konsol açılır. Aranan ifadeleriniz orada olacak. Ayrıca Ctrl + Shift + I, onu getiren kısayoldur. Sunucuya yazdırmak istiyorsanız, günlükçü işleyicilerinin sırayla olduğuna inanıyorum.
İlk yanıttaki dokümantasyon url'si zaten farklı yerlere oturum açmak için farklı yapılandırma seçeneği sunuyor. Yazdığım bu çerçeve size kullanışlı bir api sunar ve sunucu tarafı günlük uygulamanızı seçmenize izin verir. Bir göz atın: https://code.google.com/p/gwt-usefull-logging/
GWT Geliştirici modunu kullanmanızı öneririm Kod sunucusunda otomatik derleme ve kod ayırmaya biraz ek yük getirir, ancak uygulamanızın istemci tarafında bazı istisnalar ortaya çıktığında oldukça açıktır. Demek istediğim, bazen krom konsolu (veya firebug veya yerleşik tarayıcı hata ayıklama aracı) bu durumlarda çok fazla şey söylemez, güven bana, bir NullPointerException bulmak, ne olduğunu anlamaya çalıştığınızda başınızı belaya sokar kodunuzu uyararak.
Tarayıcı konsoluna yazdırmak için şuna benzer bir şey kullanıyorum:
public class EventLogger {
public static void logEvent(String subsys, String grp, String type) {
logEvent(GWT.getModuleName(), subsys, grp,
Duration.currentTimeMillis(), type);
}
public static native void logEvent(String module, String subsys,
String grp, double millis, String type)
/*-{
if ($wnd.__gwtStatsEvent) {
$wnd.__gwtStatsEvent({
'moduleName':module,
'subSystem':subsys,
'evtGroup':grp,
'millis':millis,
'type':type
});
}
}-*/;
}