Respostas:
Citando a documentação:
Adicionar o registro GWT é realmente muito simples, tão simples quanto o exemplo de código a seguir. No entanto, é importante entender como funciona o registro e como configurá-lo corretamente, portanto, reserve um tempo para ler o restante deste documento.
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
A maneira mais simples de habilitar o registro é:
# 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");
Eu precisava fazer isso no contexto de um aplicativo GWT que foi implantado em um dispositivo / emulador Android via PhoneGap (e gwt-phonegap). Nem System.out.println () nem registro GWT como acima (com declaração de módulo) apareceram no logcat do Android, então eu recorri a um empacotador JSNI simples para 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 );
}-*/;
No GWT versão 2.6.0, o método GWT.log grava a mensagem no console do navegador, você não precisa escrever métodos nativos.
Para acessar o console do navegador, você pode fazer isso usando o nativo, de uma forma muito simples. Muito útil na depuração.
Se você adicionar um método nativo como o abaixo, você pode enviar uma string para ele de onde quiser e ele irá registrá-lo no console do navegador.
public static native void console(String text)
/*-{
console.log(text);
}-*/;
Para obter mais informações sobre como usar o nativo no GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
Apenas resumindo as diferentes possibilidades mostradas nas respostas de mreppy e Strelok em um trecho. Também adicionei uma possível solução alternativa para as exceções do IE, conforme descrito aqui: Por que o JavaScript só funciona depois de abrir as ferramentas do desenvolvedor no IE uma vez?
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);
Mais uma variação usando o console nativo ...
Adicione esta classe:
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 ); }-*/;
}
Em seguida, ative a depuração com ele em algum momento, como ao iniciar o aplicativo:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
Em seguida, use-o assim:
Debug.log("Hello World!");
Eu tive esse problema também. O log do GWT funciona, mas como é todo convertido para javascript, ele é impresso na saída do cliente, portanto, basta visualizar o console do seu navegador e eles estarão lá. No Google Chrome, clique no botão Personalizar de linha tripla no canto superior direito, clique em Ferramentas -> Ferramentas do desenvolvedor e o console aparecerá. Suas declarações desejadas estarão lá. Além disso, Ctrl + Shift + I é o atalho que o abre. Se você deseja imprimir para o servidor, acredito que os gerenciadores de log e outros estão em ordem?
O url da documentação na primeira resposta já dá a opção de configuração diferente para logar em locais diferentes. Esta estrutura que escrevi oferece uma API útil e permite que você escolha sua implementação de log do lado do servidor. Dê uma olhada: https://code.google.com/p/gwt-usefull-logging/
Eu sugiro que você use o modo GWT Developer. Ele adiciona um pouco de sobrecarga devido à compilação automática e alocação de código no servidor de código, mas fica bem claro quando algumas exceções surgem no lado do cliente de seu aplicativo. Quer dizer, algumas vezes o console do Chrome (ou o firebug ou qualquer outra ferramenta embutida de depuração do navegador) não diz muito nessas situações, acredite, encontrar um NullPointerException é uma dor no pescoço quando você tenta descobrir o que está acontecendo alertando seu código.
Para imprimir no console do navegador, estou usando algo assim:
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
});
}
}-*/;
}