【问题标题】:How to configure generell logging for Vaadin server and client side?如何为 Vaadin 服务器和客户端配置通用日志记录?
【发布时间】:2019-07-10 12:29:37
【问题描述】:

我的 Vaadin 应用程序中有一些神秘的行为(随机出现一个白色的浏览器窗口)。因此,我想为客户端和服务器端激活日志记录,希望能检测到一些有用的提示,问题是什么。 为了激活客户端(GWT)的日志记录,我发现了这样的东西,它必须放在 widgetset.gwt.xml 中:

<inherits name="com.google.gwt.logging.Logging"/>
<set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />
<set-property name="gwt.logging.logLevel" value="INFO"/> <!-- SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST -->
<set-property name="gwt.logging.enabled" value="TRUE"/>

但是当我启动应用程序并且应该记录一些内容时,我只能看到一条错误消息:

com.vaadin.server.VaadinServlet          : Requested resource [/VAADIN/widgetsets/myApplication.vaadin.widgetset.MyApplicationWidgetset/remote_logging] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.

对于服务器端日志,我发现:

com.Vaadin=FINER

但是我必须把它放在哪里?据我所知 Vaadin 使用 Java 记录器。我正在使用 log4j。但是应该可以使用 Java 记录器将日志记录到 log4j 记录器中,或者? 最后,我希望在我的 log4j 日志文件中拥有一个在客户端和服务器端有大量日志记录的应用程序。

非常感谢

【问题讨论】:

  • 如果你的客户端真的死得很惨,你最好在浏览器的 devconsole 中检查 console.log。 Vaadin 在那里记录过多。如果是u2f 问题,您也会在那里看到。

标签: java logging gwt vaadin vaadin8


【解决方案1】:

如果您更新您的module.gwt.xml,您还必须更新 GWT 编译器类路径以包含所使用库的类的 JAR 和 源代码 文件。

【讨论】:

    【解决方案2】:

    我能够解决我的远程日志记录问题。我忘记添加一个由远程日志记录调用的新 Servlet,以将数据从客户端“传输”到服务器,例如:

    @WebServlet(
            name = "remoteLogging",
            // The url from the error message according missing ressources
            urlPatterns = "/VAADIN/widgetsets/myApplication.vaadin.widgetset.MyApplicationWidgetset/remote_logging"
    )
    public class GwtRemoteLoggingServlet
    extends com.google.gwt.logging.server.RemoteLoggingServiceImpl
    {}
    

    我不能使用调试控制台之类的东西,因为问题只发生在生产环境中。而且我不想解释我们的客户如何使用 Firefox 开发工具...

    感谢有关 u2f 的提示。我会看看,但我认为这不是问题,因为它也发生在 Chrome 等中。但我们仍然使用受影响的 Vaadin 版本,所以......

    有消息我会报道的。

    【讨论】:

      【解决方案3】:

      我还能够激活 Vaadin 和 Atmosphere 服务器端的日志记录。首先它必须是 com.vaadin 而不是 com.Vaadin。我还解决了配置 JUL 的问题,因为我没有在其他地方使用 JUL。我以一种快速而肮脏的方式做到了这一点:

      final String julConfiguration = String.join( " \n",
              "handlers = java.util.logging.FileHandler",
              "java.util.logging.FileHandler.limit = 99999999",
              "java.util.logging.FileHandler.count = 20",
              "java.util.logging.FileHandler.pattern = /<path>/java_util_logging_%u_%g.log",
              "com.vaadin.level = ALL",
              "org.atmosphere.level = ALL"
      );
      
      final BufferedInputStream inputStream = new BufferedInputStream(
              new ReaderInputStream( new StringReader( julConfiguration ) ) );
      LogManager.getLogManager().readConfiguration( inputStream );
      

      【讨论】:

        猜你喜欢
        • 2012-01-25
        • 2013-10-21
        • 1970-01-01
        • 2020-06-27
        • 2014-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多