Cách in ra bảng điều khiển trong GWT


92

Tôi đang gỡ lỗi một ứng dụng GWT và tôi cần in một số nội dung vào bảng điều khiển cho mục đích thử nghiệm. System.out.printlnGWT.logkhông hoạt động. Có ai có ý tưởng nào?


1
Hãy thử các câu trả lời được đăng ở đây: stackoverflow.com/questions/17463928/…
Chepech

Câu trả lời:


76

Trích dẫn tài liệu:

Việc thêm ghi nhật ký GWT thực sự khá đơn giản, đơn giản như ví dụ mã sau. Tuy nhiên - việc hiểu cách ghi nhật ký hoạt động và cách định cấu hình chính xác là điều quan trọng, vì vậy hãy dành thời gian đọc phần còn lại của tài liệu này.

http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html

Cách đơn giản nhất để kích hoạt ghi nhật ký là:

# 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
Tôi nghĩ nhận xét về việc GWT.log không hoạt động là lý do tại sao bạn bị bỏ phiếu.
séc

11
Đúng vậy, GWT.log chỉ hoạt động trong DevMode, vì vậy nếu bạn đang biên dịch mã của mình bằng trình biên dịch GWT, bạn sẽ không bao giờ thấy bất kỳ đầu ra nào từ GWT.log ().
Andrew Mackenzie

2
@Andrew Rất tiếc. Bạn thực sự chính xác. Đã quá lâu kể từ câu trả lời này, tôi đã quên tất cả về nó :) GWT.log không hoạt động ở Chế độ Web.
Strelok

1
Điều này có thể không hoạt động trong trình ghi bảng điều khiển của IE do lỗi này . Họ nói rằng nó đã được sửa trong GWT 2.6.
Brad Cupit

2
Nhập lớp Logger mà bạn đã sử dụng là gì? Điều này thực sự rất bực bội.
CrazySabbath

50

Tôi cần thực hiện việc này trong bối cảnh ứng dụng GWT đã được triển khai tới thiết bị / trình mô phỏng Android qua PhoneGap (và gwt-phonegap). Ghi nhật ký System.out.println () và GWT như ở trên (với khai báo mô-đun) đều không hiển thị trong logcat của Android, vì vậy tôi đã sử dụng trình bao bọc JSNI đơn giản cho console.log:

  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 );
  }-*/;

Đối với tất cả người dùng IE: Để tránh các trường hợp ngoại lệ khi các công cụ phát triển không được mở, tốt hơn bạn nên gói lệnh gọi trong một khối thử bắt hoặc sử dụng một trong các giải pháp được nêu ở đây: stackoverflow.com/q/7742781/1845976
schnatterer

Bạn có thể xem qua câu hỏi này ?
hiển thị

27

Trong GWT phiên bản 2.6.0, phương thức GWT.log ghi thông báo vào bảng điều khiển của trình duyệt, bạn không cần phải viết các phương thức gốc.


1
Tôi đã hy vọng điều này sẽ thành công. Tôi đã thêm GWT.log ("Dễ tìm") và sau đó tìm kiếm chuỗi "Dễ tìm" trong toàn bộ dự án. Nó chỉ có trong nguồn của tôi. Tôi đã kiểm tra tài liệu GWT. Nó cho biết "GWT.log" chỉ dành cho chế độ nhà phát triển trong cửa sổ nhà phát triển. gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

Không, GWT.log chỉ dành cho chế độ DEV / SUPERDEV, nhưng không dành cho sản xuất (nó sẽ bị cắt bởi trình biên dịch của GWT).
Wladimir Schmidt

24

Để đăng nhập vào bảng điều khiển của trình duyệt, bạn có thể thực hiện bằng cách sử dụng bản địa, một cách rất đơn giản. Rất hữu ích trong việc gỡ lỗi.

Nếu bạn thêm một phương thức gốc như bên dưới, bạn có thể gửi một chuỗi đến nó từ nơi bạn muốn và nó sẽ ghi nó vào bảng điều khiển của trình duyệt.

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

Để biết thêm thông tin về cách sử dụng native trong GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


Ngoài ra, thay vì cung cấp tham số là Chuỗi, bạn có thể cung cấp cho nó một cái gì đó khác (ví dụ: JavaScriptObject) và giao diện điều khiển đó.
erkinyldz

7

Chỉ cần tổng hợp các khả năng khác nhau được hiển thị trong câu trả lời của mreppyStrelok trong một đoạn mã. Tôi cũng đã thêm một giải pháp khả thi cho các trường hợp ngoại lệ của IE như được mô tả ở đây: Tại sao JavaScript chỉ hoạt động sau khi mở các công cụ dành cho nhà phát triển trong IE một lần?

    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

Tuy nhiên, một biến thể khác bằng cách sử dụng bảng điều khiển gốc ...

Thêm lớp này:

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 ); }-*/;
}

Sau đó, bật gỡ lỗi với nó tại một số thời điểm, như khi khởi động ứng dụng:

public class XXXXXX implements EntryPoint {
    @Override
    public void onModuleLoad() {
        Debug.enable();
        ...
    }
}

Sau đó, chỉ cần sử dụng nó như vậy:

Debug.log("Hello World!");

0

Tôi cũng có vấn đề này. Nhật ký GWT hoạt động nhưng vì tất cả được chuyển đổi sang javascript, nó in ra đầu ra của ứng dụng khách, vì vậy chỉ cần xem bảng điều khiển của trình duyệt của bạn và chúng sẽ ở đó. Trong Google Chrome, nhấp vào nút Tùy chỉnh ba dòng ở trên cùng bên phải, nhấp vào Công cụ -> Công cụ dành cho nhà phát triển và bảng điều khiển sẽ bật lên. Các tuyên bố sau khi tìm kiếm của bạn sẽ ở đó. Ngoài ra, Ctrl + Shift + I là phím tắt đưa nó lên. Nếu bạn muốn in tới máy chủ, tôi tin rằng các trình xử lý trình ghi nhật ký và như vậy là theo thứ tự?


0

Url tài liệu trong câu trả lời đầu tiên đã cung cấp tùy chọn cấu hình khác nhau để đăng nhập vào những nơi khác nhau. Khung mà tôi đã viết này cung cấp cho bạn một api hữu ích và cho phép bạn chọn triển khai ghi nhật ký phía máy chủ của mình. Hãy xem: https://code.google.com/p/gwt-usefull-logging/


0

Tôi khuyên bạn nên sử dụng chế độ Nhà phát triển GWT Nó thêm một chút chi phí gây ra việc biên dịch tự động và phân bổ mã trên máy chủ mã, nhưng khá rõ ràng khi một số ngoại lệ phát sinh trong phía máy khách của ứng dụng của bạn. Ý tôi là, đôi khi bảng điều khiển chrome (hoặc firebug hoặc bất kỳ công cụ gỡ lỗi trình duyệt nào được tích hợp sẵn) không nói quá nhiều trong những tình huống đó, tin tôi đi, việc tìm kiếm một NullPointerException là một cơn đau thắt cổ khi bạn cố gắng tìm ra điều gì đang xảy ra bằng cách cảnh báo mã của bạn.


0

Để in ra bảng điều khiển trình duyệt, tôi đang sử dụng một cái gì đó như sau:

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
        });
    }
}-*/;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.