मैं एक GWT एप्लिकेशन को डिबग कर रहा हूं और मुझे परीक्षण उद्देश्यों के लिए कुछ सामान को कंसोल पर प्रिंट करने की आवश्यकता है। System.out.println
और GWT.log
काम नहीं करते। क्या किसी के पास कोई विचार है?
मैं एक GWT एप्लिकेशन को डिबग कर रहा हूं और मुझे परीक्षण उद्देश्यों के लिए कुछ सामान को कंसोल पर प्रिंट करने की आवश्यकता है। System.out.println
और GWT.log
काम नहीं करते। क्या किसी के पास कोई विचार है?
जवाबों:
दस्तावेज का हवाला देते हुए:
GWT लॉगिंग जोड़ना वास्तव में काफी सरल है, निम्न कोड उदाहरण के रूप में सरल है। हालाँकि - यह समझना कि लॉगिंग कैसे काम करती है, और इसे सही तरीके से कैसे कॉन्फ़िगर किया जाना महत्वपूर्ण है, इसलिए कृपया इस दस्तावेज़ के बाकी हिस्सों को पढ़ने के लिए समय निकालें।
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
लॉगिंग को सक्षम करने का सबसे सरल तरीका है:
# 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");
मुझे GWT एप्लिकेशन के संदर्भ में ऐसा करने की आवश्यकता थी जो PhoneGap (और gwt-phonegap) के माध्यम से एक Android डिवाइस / एमुलेटर पर तैनात किया गया था। न तो System.out.println () और न ही ऊपर (मॉड्यूल घोषणा के साथ) GWT लॉगिंग Android के लोगो में दिखाई गई, इसलिए मैंने कंसोल.लॉग के लिए एक साधारण JSNI आवरण का सहारा लिया:
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 में, विधि GWT.log ब्राउज़र कंसोल को संदेश लिखता है, आपको मूल तरीके लिखने की आवश्यकता नहीं है।
ब्राउज़र कंसोल में लॉग इन करने के लिए आप इसे बहुत ही सरल तरीके से देशी का उपयोग कर सकते हैं। डीबगिंग में बहुत मददगार।
यदि आप नीचे की तरह एक देशी विधि जोड़ते हैं, तो आप इसे एक स्ट्रिंग भेज सकते हैं जहाँ से आप चाहते हैं और यह ब्राउज़र कंसोल में लॉग करेगा।
public static native void console(String text)
/*-{
console.log(text);
}-*/;
GWT में देशी का उपयोग करने के बारे में अधिक जानकारी के लिए: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
बस के जवाब के में दिखाया गया है अलग अलग संभावनाएं संक्षेप mreppy और Strelok एक स्निपेट में। मैंने IE अपवादों के लिए एक संभावित वर्कअराउंड को भी यहाँ वर्णित किया है: जावास्क्रिप्ट केवल IE में डेवलपर टूल खोलने के बाद ही काम क्यों करता है?
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);
देशी कंसोल का उपयोग करते हुए एक और बदलाव ...
इस वर्ग को जोड़ें:
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 ); }-*/;
}
फिर, कुछ बिंदु पर इसके साथ डिबगिंग सक्षम करें, जैसे ऐप शुरू करना:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
तो बस इसे इस तरह का उपयोग करें:
Debug.log("Hello World!");
मुझे भी यह समस्या थी। GWT लॉग काम करता है, लेकिन क्योंकि यह सब जावास्क्रिप्ट में बदल जाता है, यह क्लाइंट आउटपुट पर प्रिंट करता है, इसलिए बस अपने ब्राउज़र के कंसोल को देखें और वे वहां होंगे। Google Chrome में ऊपर दाईं ओर मौजूद ट्रिपल-लाइन कस्टमाइज़ बटन पर क्लिक करें, उपकरण -> डेवलपर टूल पर क्लिक करें और कंसोल पॉप अप हो जाएगा। आपके मांगे गए स्टेटमेंट होंगे। इसके अलावा, Ctrl + Shift + I शॉर्टकट है जो इसे लाता है। यदि आप सर्वर पर प्रिंट करना चाहते हैं, मेरा मानना है कि लकड़हारा हैंडलर और इस तरह के क्रम में हैं?
पहले उत्तर में प्रलेखन url पहले से ही विभिन्न स्थानों पर लॉग करने के लिए अलग कॉन्फ़िगरेशन विकल्प देता है। मेरे द्वारा लिखी गई यह रूपरेखा आपको एक उपयोगी एपीआई प्रदान करती है और आपको अपना सर्वर-साइड लॉगिंग कार्यान्वयन चुनने की अनुमति देती है। एक नज़र रखें: https://code.google.com/p/gwt-usefull-log/
मैं आपको GWT डेवलपर मोड का उपयोग करने का सुझाव देता हूं। यह थोड़ा ओवरहेड जोड़ता है जिससे कोड सर्वर पर स्वचालित संकलन और कोड-आवंटन होता है, लेकिन जब आपके एप्लिकेशन के क्लाइंट पक्ष में कुछ अपवाद उत्पन्न होते हैं तो यह बहुत स्पष्ट है। मेरा मतलब है, कुछ समय क्रोम कंसोल (या फायरबग या जो भी ब्राउज़र निर्मित उपकरण डिबगिंग करता है) उन स्थितियों में बहुत अधिक नहीं कहता है, मुझ पर विश्वास करें, NullPointerException को ढूंढना गर्दन में दर्द है जब आप यह पता लगाने की कोशिश करते हैं कि क्या हो रहा है। अपना कोड अलर्ट करके।
ब्राउज़र कंसोल पर मुद्रण के लिए मैं कुछ इस तरह का उपयोग कर रहा हूं:
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
});
}
}-*/;
}