Настройка remoteLoggingServlet в GWT

#gwt #logging

#gwt #ведение журнала

Вопрос:

Из http://code.google.com/intl/es-ES/webtoolkit/doc/latest/DevGuideLogging.html в разделе удаленного ведения журнала говорится, что вам нужно

Вам также нужно будет обслуживать remoteLoggingServlet.

Я хотел бы использовать функцию удаленного ведения журнала, но я не могу найти пример того, как выполнить этот шаг.

Я настроил следующее в своем .gwt.xml

 <!-- Logging configuration -->
  <inherits name="com.google.gwt.logging.Logging"/>
  <set-property name="gwt.logging.logLevel" value="INFO"/>
  <set-property name="gwt.logging.enabled" value="TRUE"/>
  <set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />  
  <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  
  <set-property name="gwt.logging.systemHandler" value="ENABLED" />
  <set-property name="gwt.logging.popupHandler" value="DISABLED" />
  <set-property name="gwt.logging.consoleHandler" value="DISABLED"/> 
  <set-property name="gwt.logging.firebugHandler" value="DISABLED" />   
  

Журналы отображаются в консоли std.out и консоли режима разработки, но при удаленном ведении журнала я получаю следующую ошибку

СЕРЬЕЗНАЯ ПРОБЛЕМА: сбой удаленного ведения журнала: исключение com.google.gwt.user.client.rpc.StatusCodeException: 404

в com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:209 ) в com.google.gwt.http.client.Получен запрос fireOnResponseReceived(Request.java:287) на com.google.gwt.http.client.RequestBuilder $1.onReadyStateChange(RequestBuilder.java:395) в sun.reflect.Сгенерированный methodaccessor23.invoke (неизвестный источник) в sun.reflect.Делегирование methodaccessorimpl.invoke(неизвестный источник) на java.lang.reflect.Метод.invoke(неизвестный источник) в com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) в com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) в com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) в com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326) в com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207) в com.google.gwt.dev.shell.ModuleSpaceOOPHM.Выполните вызов (ModuleSpaceOOPHM.java:129) в com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) на com.google.gwt.dev.shell.Модульное пространство.Вызывающий объект (ModuleSpace.java:269) на com.google.gwt.dev.shell.JavaScriptHost.Вызывающий объект (JavaScriptHost.java:91) на com.google.gwt.core.client.impl.Impl.apply(Impl.java ) в com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) в sun.reflect.Сгенерированный methodaccessor18.invoke (неизвестный источник) в sun.reflect.Делегирование methodaccessorimpl.invoke(неизвестный источник) на java.lang.reflect.Метод.invoke(неизвестный источник) в com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) в com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) в com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) в com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) в com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) в com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) на java.lang.Thread.run(неизвестный источник)

Комментарии:

1. Я не понимаю, почему они так расплывчато описали это в своей документации. Хороший вопрос.

Ответ №1:

Вы должны определить remote_logging servlet в вашем web.xml:

 <!-- remote logging -->
<servlet>
    <servlet-name>remoteLogging</servlet-name>
    <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>remoteLogging</servlet-name>
    <url-pattern>/your-gwt-module-name/remote_logging</url-pattern>
</servlet-mapping>
  

Комментарии:

1. Похоже, IntelliJ хочет автоматически заменить «your-gwt-module-name» на «com.google.gwt.logging». Ведение журнала». Я использовал имя своего модуля gwt, а не текст напрямую.

2. Отклонение от курса: «your-gwt-module-name» относится к тому факту, что вы должны поместить здесь имя ВАШЕГО модуля GWT, как оно отображается в каталоге / war, и, вероятно, это делается с помощью XML-атрибута «переименовать в» в вашем .gwt.xml файл. Убедитесь, что определенный вами путь доступен на вашем сервере и имя не конфликтует ни с чем другим.

Ответ №2:

Я нашел это сообщение в блоге очень полезным:

https://vegdave.wordpress.com/2013/02/26/howto-setup-gwt-remote-logging/

App.gwt.xml:

 <inherits name=”com.google.gwt.logging.Logging”/>
<set-property name=”gwt.logging.simpleRemoteHandler” value=”ENABLED” />
<set-property name=”gwt.logging.logLevel” value=”FINEST”/>
<set-property name=”gwt.logging.enabled” value=”TRUE”/>
<set-property name=”gwt.logging.consoleHandler” value=”ENABLED” />
<set-property name=”gwt.logging.popupHandler” value=”DISABLED” />
  

web.xml:

 <servlet>
<servlet-name>remoteLogging</servlet-name>
<servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>remoteLogging</servlet-name>
<url-pattern>/YOUR_MODULE/remote_logging</url-pattern>
</servlet-mapping>
  

В GWT:

 import com.google.gwt.logging.client.SimpleRemoteLogHandler;
import java.util.logging.Level;
import java.util.logging.LogRecord;

SimpleRemoteLogHandler remoteLog = new SimpleRemoteLogHandler();
remoteLog.publish(new LogRecord(Level.INFO, “log message”));
  

Комментарии:

1. Logger logger = Logger.getLogger(«simpleRemoteHandler»); logger.log(уровень. СЕРЬЕЗНЫЙ, «это сообщение должно быть зарегистрировано»);