GWT में कंसोल पर कैसे प्रिंट करें


92

मैं एक GWT एप्लिकेशन को डिबग कर रहा हूं और मुझे परीक्षण उद्देश्यों के लिए कुछ सामान को कंसोल पर प्रिंट करने की आवश्यकता है। System.out.printlnऔर GWT.logकाम नहीं करते। क्या किसी के पास कोई विचार है?


1
यहां पोस्ट किए गए उत्तरों को आज़माएं: stackoverflow.com/questions/17463928/…
Chepech

जवाबों:


76

दस्तावेज का हवाला देते हुए:

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");

1
मुझे लगता है कि GWT.log के बारे में टिप्पणी काम नहीं कर रही है कि आपने मतदान क्यों किया।
चेकसेट

11
हां, GWT.log केवल DevMode में काम करता है, इसलिए यदि आप GWT कंपाइलर के साथ अपना कोड संकलित कर रहे हैं तो आपको GWT.log () से कोई आउटपुट नहीं दिखेगा।
एंड्रयू मैकेंजी

2
@ और ओप्स। आप वास्तव में सही हैं। इस उत्तर के बाद से इतना लंबा समय हो गया है, कि मैं पहले से ही इसके बारे में सब भूल गया :) GWT.log वेब मोड में काम नहीं करता है ।
स्ट्रालोक

1
इस बग के कारण IE के कंसोल लॉगर में काम नहीं हो सकता है । वे कहते हैं कि यह GWT 2.6 में तय हो गया है।
ब्रैड कपिट

2
लकड़हारा वर्ग आयात क्या आपने इस्तेमाल किया है? यह वास्तव में निराशाजनक है।
क्रेजीसाबथ

49

मुझे 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 );
  }-*/;

सभी IE उपयोगकर्ताओं के लिए: विकास के साधनों से बचने के लिए जब विकास उपकरण नहीं खोले जाते हैं, तो आप कॉल को पकड़ने की कोशिश में ब्लॉक में लपेटें या यहां बताए गए किसी एक समाधान का उपयोग करें: stackoverflow.com/q/7742781/1845976
schnatterter

क्या आप इस प्रश्न पर एक नज़र डाल सकते हैं ?
डिस्प्लेनाम

27

GWT संस्करण 2.6.0 में, विधि GWT.log ब्राउज़र कंसोल को संदेश लिखता है, आपको मूल तरीके लिखने की आवश्यकता नहीं है।


1
मुझे उम्मीद थी कि यह काम करेगा। मैंने एक GWT.log ("खोजने में आसान") जोड़ा और फिर स्ट्रिंग "खोजने में आसान" के लिए पूरी परियोजना की खोज की। यह केवल मेरे स्रोत में था। मैंने GWT डॉक्स की जाँच की। यह कहता है "GWT.log" केवल देव विधा में देव विधा के लिए है। gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

नहीं, GWT.log केवल DEV / SUPERDEV मोड के लिए है, लेकिन उत्पादन के उपयोग के लिए नहीं (इसे GWT के कंपाइलर द्वारा काट दिया जाएगा)।
व्लादिमीर श्मिट

24

ब्राउज़र कंसोल में लॉग इन करने के लिए आप इसे बहुत ही सरल तरीके से देशी का उपयोग कर सकते हैं। डीबगिंग में बहुत मददगार।

यदि आप नीचे की तरह एक देशी विधि जोड़ते हैं, तो आप इसे एक स्ट्रिंग भेज सकते हैं जहाँ से आप चाहते हैं और यह ब्राउज़र कंसोल में लॉग करेगा।

public static native void console(String text)
/*-{
    console.log(text);
}-*/;

GWT में देशी का उपयोग करने के बारे में अधिक जानकारी के लिए: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


स्ट्रिंग के रूप में पैरामीटर देने के बजाय, आप इसे कुछ और दे सकते हैं (उदाहरण: JavaScriptObject) और कंसोल।
erkinyldz

7

बस के जवाब के में दिखाया गया है अलग अलग संभावनाएं संक्षेप 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);

5

देशी कंसोल का उपयोग करते हुए एक और बदलाव ...

इस वर्ग को जोड़ें:

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!");

0

मुझे भी यह समस्या थी। GWT लॉग काम करता है, लेकिन क्योंकि यह सब जावास्क्रिप्ट में बदल जाता है, यह क्लाइंट आउटपुट पर प्रिंट करता है, इसलिए बस अपने ब्राउज़र के कंसोल को देखें और वे वहां होंगे। Google Chrome में ऊपर दाईं ओर मौजूद ट्रिपल-लाइन कस्टमाइज़ बटन पर क्लिक करें, उपकरण -> डेवलपर टूल पर क्लिक करें और कंसोल पॉप अप हो जाएगा। आपके मांगे गए स्टेटमेंट होंगे। इसके अलावा, Ctrl + Shift + I शॉर्टकट है जो इसे लाता है। यदि आप सर्वर पर प्रिंट करना चाहते हैं, मेरा मानना ​​है कि लकड़हारा हैंडलर और इस तरह के क्रम में हैं?


0

पहले उत्तर में प्रलेखन url पहले से ही विभिन्न स्थानों पर लॉग करने के लिए अलग कॉन्फ़िगरेशन विकल्प देता है। मेरे द्वारा लिखी गई यह रूपरेखा आपको एक उपयोगी एपीआई प्रदान करती है और आपको अपना सर्वर-साइड लॉगिंग कार्यान्वयन चुनने की अनुमति देती है। एक नज़र रखें: https://code.google.com/p/gwt-usefull-log/


0

मैं आपको GWT डेवलपर मोड का उपयोग करने का सुझाव देता हूं। यह थोड़ा ओवरहेड जोड़ता है जिससे कोड सर्वर पर स्वचालित संकलन और कोड-आवंटन होता है, लेकिन जब आपके एप्लिकेशन के क्लाइंट पक्ष में कुछ अपवाद उत्पन्न होते हैं तो यह बहुत स्पष्ट है। मेरा मतलब है, कुछ समय क्रोम कंसोल (या फायरबग या जो भी ब्राउज़र निर्मित उपकरण डिबगिंग करता है) उन स्थितियों में बहुत अधिक नहीं कहता है, मुझ पर विश्वास करें, NullPointerException को ढूंढना गर्दन में दर्द है जब आप यह पता लगाने की कोशिश करते हैं कि क्या हो रहा है। अपना कोड अलर्ट करके।


0

ब्राउज़र कंसोल पर मुद्रण के लिए मैं कुछ इस तरह का उपयोग कर रहा हूं:

EventLogger.java

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
        });
    }
}-*/;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.