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");
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 );
}-*/;
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에서 개발자 도구를 한 번만 연 후에 만 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);
네이티브 콘솔을 사용한 또 다른 변형 ...
이 클래스 추가 :
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 로그는 작동하지만 모두 javascript로 변환 되었기 때문에 클라이언트 출력으로 인쇄되므로 브라우저의 콘솔을보기 만하면됩니다. Google 크롬에서 오른쪽 상단의 3 줄 맞춤 설정 버튼을 클릭하고 도구-> 개발자 도구를 클릭하면 콘솔이 나타납니다. 귀하가 원하는 진술이 거기에있을 것입니다. 또한 Ctrl + Shift + I가 바로 가기입니다. 서버에 인쇄하려면 로거 핸들러 등이 순서대로되어 있다고 생각합니까?
첫 번째 답변의 문서 URL은 이미 다른 위치에 기록하는 다른 구성 옵션을 제공합니다. 내가 작성한이 프레임 워크는 유용한 API를 제공하며 서버 측 로깅 구현을 선택할 수 있습니다. 보세요 : https://code.google.com/p/gwt-usefull-logging/
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
});
}
}-*/;
}