GWT에서 콘솔에 인쇄하는 방법


92

GWT 애플리케이션을 디버깅 중이며 테스트 목적으로 콘솔에 몇 가지 항목을 인쇄해야합니다. System.out.printlnGWT.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가 작동하지 않는다는 의견이 투표를받은 이유라고 생각합니다.
checketts

11
예, GWT.log는 DevMode에서만 작동하므로 GWT 컴파일러로 코드를 컴파일하는 경우 GWT.log ()의 출력을 볼 수 없습니다.
Andrew Mackenzie

2
@Andrew Ooops. 당신은 참으로 옳습니다. 이 답변 이후 너무 오래되어 이미 모든 것을 잊어 버렸습니다. :) GWT.log는 웹 모드에서 작동 하지 않습니다 .
Strelok 2013

1
버그로 인해 IE의 콘솔 로거에서는 작동하지 않을 수 있습니다 . 그들은 GWT 2.6에서 수정되었다고 말합니다.
Brad Cupit 2013-06-27

2
사용한 Logger 클래스 가져 오기는 무엇입니까? 정말 실망 스럽습니다.
CrazySabbath

50

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 사용자 : 개발 도구가 열리지 않을 때 예외를 방지하려면 try catch 블록에서 호출을 래핑하거나 여기에 명시된 솔루션 중 하나를 사용하는 것이 좋습니다. 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의 컴파일러에 의해 잘림).
Wladimir Schmidt

24

브라우저 콘솔에 로그인하려면 매우 간단한 방법으로 기본을 사용하여 수행 할 수 있습니다. 디버깅에 매우 유용합니다.

아래와 같이 네이티브 메서드를 추가하면 원하는 위치에서 문자열을 보낼 수 있으며 브라우저 콘솔에 기록됩니다.

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

GWT에서 네이티브 사용에 대한 자세한 정보 : http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


또한 매개 변수를 문자열로 제공하는 대신 다른 것을 제공하고 (예 : JavaScriptObject) 콘솔을 사용할 수 있습니다.
erkinyldz

7

mreppyStrelok 의 답변에 표시된 다양한 가능성 을 하나의 스 니펫 으로 요약하십시오 . 또한 여기에 설명 된대로 IE 예외에 대한 가능한 해결 방법을 추가 했습니다. 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 크롬에서 오른쪽 상단의 3 줄 맞춤 설정 버튼을 클릭하고 도구-> 개발자 도구를 클릭하면 콘솔이 나타납니다. 귀하가 원하는 진술이 거기에있을 것입니다. 또한 Ctrl + Shift + I가 바로 가기입니다. 서버에 인쇄하려면 로거 핸들러 등이 순서대로되어 있다고 생각합니까?



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
        });
    }
}-*/;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.