GWTでコンソールに出力する方法


回答:


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が機能しないというコメントが、あなたが投票した理由だと思います。
checketts

11
ええ、GWT.logはDevModeでのみ機能するため、GWTコンパイラでコードをコンパイルしている場合、GWT.log()からの出力は表示されません。
アンドリューマッケンジー

2
@Andrew Ooops。あなたは確かに正しいです。この回答から長い間、私はすでにすべてを忘れていました:) GWT.logはWebモードで機能しませ
Strelok

1
このバグのため、IEのコンソールロガーでは機能しない可能性があります。彼らは、GWT 2.6で修正されたと言っています。
Brad Cupit 2013年

2
使用したLoggerクラスのインポートは何ですか?これは本当にイライラさせられます。
CrazySabbath

49

PhoneGap(およびgwt-phonegap)を介してAndroidデバイス/エミュレーターにデプロイされたGWTアプリケーションのコンテキストでこれを行う必要がありました。上記のSystem.out.println()とGWTロギング(モジュール宣言あり)のどちらもAndroidのlogcatに表示されなかったため、console.logへの単純な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ユーザーの場合:回避の例外にするために開発ツールを使用すると、より良いここに述べたソリューションのトライcatchブロックまたは使用1で呼び出しをラップ開かれていないとき stackoverflow.com/q/7742781/1845976
schnatterer

この質問を見てください。
displayname

27

GWTバージョン2.6.0では、メソッドGWT.logがブラウザーコンソールにメッセージを書き込むため、ネイティブメソッドを記述する必要はありません。


1
これがうまくいくことを願っていました。GWT.log( "Easy to find")を追加し、プロジェクト全体で文字列 "Easy to find"を検索しました。それは私の情報源だけにありました。GWTのドキュメントを確認しました。「GWT.log」は開発ウィンドウの開発モード専用であると書かれています。gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

いいえ、GWT.logはDEV / SUPERDEVモード専用であり、本番用ではありません(GWTのコンパイラーによって切り取られます)。
ウラジミールシュミット2017

24

ブラウザコンソールにログを記録するには、非常に簡単な方法で、ネイティブを使用してログを記録できます。デバッグに非常に役立ちます。

以下のようにネイティブメソッドを追加すると、必要な場所からそのメソッドに文字列を送信でき、ブラウザコンソールに記録されます。

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

GWTでのネイティブの使用に関する詳細情報:http : //www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


また、パラメータを文字列として与える代わりに、何か他のもの(例:JavaScriptObject)を与えて、それをコンソールすることができます。
erkinyldz 14

7

mreppyStrelokの回答に示されているさまざまな可能性を1つのスニペットにまとめるだけです。ここで説明するように、IE例外の回避策の1つを追加しました。なぜIEで開発者ツールを開いた後にJavaScriptが機能するのですか?

    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ログは機能しますが、すべてがJavaScriptに変換されているため、クライアント出力に出力されるため、ブラウザーのコンソールを表示するだけでログが表示されます。Google Chromeで、右上にある3行の[カスタマイズ]ボタンをクリックし、[ツール]-> [開発者ツール]をクリックすると、コンソールがポップアップ表示されます。あなたの求められている声明はそこにあります。また、Ctrl + Shift + Iはそれを起動するショートカットです。サーバーに出力したい場合、ロガーハンドラーなどが適切だと思いますか?


0

最初の回答のドキュメントURLには、別の場所にログを記録するための別の構成オプションが既に示されています。私が書いたこのフレームワークは、便利なAPIを提供し、サーバー側のロギング実装を選択できるようにします。見てください:https : //code.google.com/p/gwt-usefull-logging/


0

GWT開発者モードを使用することをお勧めします。これにより、コードサーバーでの自動コンパイルとコード割り当ての原因となるオーバーヘッドが少し追加されますが、アプリケーションのクライアント側でいくつかの例外が発生した場合は明らかです。つまり、これらの状況では、Chromeコンソール(またはFirebugやその他のブラウザデバッグ組み込みツール)があまり言いすぎないことがあります。信頼してください。コードに警告する。


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
        });
    }
}-*/;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.