GWT 远程日志记录无法记录 Throwable Stacktrace?

2023-12-25

我想使用 GWT远程记录 http://www.gwtproject.org/doc/latest/DevGuideLogging.html。这就是我所做的:

在我的 web.xml 文件中我做了:

<servlet>
        <servlet-name>remoteLogging</servlet-name>
        <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>remoteLogging</servlet-name>
        <url-pattern>/web/remote_logging</url-pattern>
    </servlet-mapping> 

在我的 gwt.xml 文件中,我做了:

 <module rename-to='web'>

 ...    

 <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.popupHandler" value="DISABLED" />
    <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  
    <set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />

在我的 GWT Java 代码中的某个地方我做了:

Logger logger = Logger.getLogger("NameOfYourLogger");
logger.log(Level.SEVERE, "this message should get logged");

但是,当我尝试像这样记录堆栈跟踪(Throwable)时:

// Throwable throwable

LogRecord lr = new LogRecord(Level.SEVERE, "test");
lr.setThrown(throwable);
logger.log(lr);

我收到错误:

16:24:26.887 [ERROR] [web] Sun Feb 09 16:24:26 CET 2014 WireActivityLogger
SEVERE: Remote logging failed: 
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: java.lang.ClassCastException: com.google.gwt.core.client.impl.SerializableThrowable cannot be cast to com.google.gwt.core.shared.SerializableThrowable
    at com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException_FieldSerializer.instantiate(IncompatibleRemoteServiceException_FieldSerializer.java:16)
    at com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException_FieldSerializer.create(IncompatibleRemoteServiceException_FieldSerializer.java:25)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:115)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:396)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:216)
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
    at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
    at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Thread.java:722)

如何远程记录堆栈跟踪?

编辑:我也尝试过

// Throwable throwable
LogRecord lr = new LogRecord(Level.SEVERE, throwable.toString());
logger.log(lr);

and

// Throwable throwable
LogRecord lr = new LogRecord(Level.SEVERE, throwable.getMessage());
logger.log(lr);

但我收到以下错误:

| Error 2014-02-19 02:21:04,017 [http-nio-8080-exec-7] ERROR [localhost].[/test]  - Exception while dispatching incoming RPC call
Message: Service method 'public abstract java.lang.String com.google.gwt.logging.shared.RemoteLoggingService.logOnServer(java.util.logging.LogRecord)' threw an unexpected exception: java.lang.NullPointerException
    Line | Method
->>  389 | encodeResponseForFailure in com.google.gwt.user.server.rpc.RPC
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    579 | invokeAndEncodeResponse  in     ''
|    265 | processCall . . . . . .  in com.google.gwt.user.server.rpc.RemoteServiceServlet
|    305 | processPost              in     ''
|     62 | doPost . . . . . . . . . in com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet
|     46 | doFilterInternal         in org.grails.jaxrs.web.JaxrsFilter
|     70 | doFilter . . . . . . . . in com.github.greengerong.PreRenderSEOFilter
|   1145 | runWorker                in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run                      in java.lang.Thread
Caused by NullPointerException: null
->>  262 | hash                     in java.util.Hashtable
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    459 | get                      in     ''
|    489 | findLogger . . . . . . . in java.util.logging.LogManager$LoggerContext
|    910 | getLogger                in java.util.logging.LogManager
|    400 | demandLogger . . . . . . in     ''
|    317 | demandLogger             in java.util.logging.Logger
|    361 | getLogger . . . . . . .  in     ''
|     62 | logOnServer              in com.google.gwt.logging.server.RemoteLoggingServiceUtil
|     46 | logOnServer . . . . . .  in com.google.gwt.logging.server.RemoteLoggingServiceImpl
|    561 | invokeAndEncodeResponse  in com.google.gwt.user.server.rpc.RPC
|    265 | processCall . . . . . .  in com.google.gwt.user.server.rpc.RemoteServiceServlet
|    305 | processPost              in     ''
|     62 | doPost . . . . . . . . . in com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet
|     46 | doFilterInternal         in org.grails.jaxrs.web.JaxrsFilter
|     70 | doFilter . . . . . . . . in com.github.greengerong.PreRenderSEOFilter
|   1145 | runWorker                in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run                      in java.lang.Thread

Edit:

这是我使用的代码:

import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

new AsyncCallback<GetResults<ItemDto>>() {


            @Override
            public void onFailure(Throwable e) {
                Logger logger = Logger.getLogger("test");
                logger.log(Level.SEVERE, "this message should get logged");

                LogRecord lr = new LogRecord(Level.SEVERE, e.toString());
                logger.log(lr);

            }

            ...

}

考虑记录异常堆栈跟踪:

<set-property name="compiler.stackMode"   
     value="emulated" />  
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers"   
     value="true"/>   
<set-configuration-property name="compiler.emulatedStack.recordFileNames"   
     value="true"/>   

堆栈跟踪和异常处理如下:

  1. http://www.summa-tech.com/blog/2012/06/11/7-tips-for-exception-handling-in-gwt/ http://www.summa-tech.com/blog/2012/06/11/7-tips-for-exception-handling-in-gwt/

  2. https://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions https://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GWT 远程日志记录无法记录 Throwable Stacktrace? 的相关文章

  • 如何切换整个页面的深色主题?

    我已经成功地在 html 和 Flask 中按下复选框时切换深色主题和浅色主题 但是我怎样才能让深色主题覆盖整个页面 而不仅仅是一些 div 元素呢 边距仍然是浅色主题 CSS代码如下 container display flow widt
  • java.sql.SQLException: - ORA-01000: 超出最大打开游标数

    我收到 ORA 01000 SQL 异常 所以我有一些与之相关的疑问 最大打开游标是否与 JDBC 连接数完全相关 或者它们也与我们为单个连接创建的语句和结果集对象相关吗 我们正在使用连接池 有没有办法配置数据库中语句 结果集对象的数量 如
  • 如何使 Loopback 模型事件起作用?

    我尝试过一个例子http apidocs strongloop com loopback model http apidocs strongloop com loopback model MyModel on changed functio
  • 调整发散堆积条形图以使用通用更新模式

    我一直在使用可用的堆积条形图示例here https bl ocks org mbostock b5935342c6d21928111928401e2c8608使用以下代码 var data month Q1 2016 apples 384
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 在没有全局变量的情况下对多个事件使用 Promise 回调

    我有一个包含在函数中的承诺 我将使用不同的输入参数多次调用该函数 每次承诺解决时 我都会将解决的值推送到存储数组中 当我所有的调用承诺都得到解决后 我将在其他函数中使用这个存储数组 是否有任何干净的方法可以在不使用 全局 变量的情况下进行设
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • Google Apps 脚本:如何水平对齐 inlineImage

    我有以下代码 它是一个更大程序的一部分 我正在尝试将图像从我的 Google 驱动器插入到 Google 文档中 并调整其大小并居中 到目前为止 我能够让程序插入图像并调整其大小 但我不知道如何使 inlineImage 居中 我是使用谷歌
  • Web 扩展中共享 vuex 状态(死对象问题)

    我正在尝试在网络扩展中使用共享的 vue js 状态 状态存储在后台脚本的 DOM 中并呈现在弹出页面中 第一次尝试 我的第一次尝试是使用一个没有 vuex 的简单商店 背景 js var store count 0 popup js br
  • 如何在 Android 设备(平板电脑和手机)方向更改时获得正确的窗口宽度

    我正在尝试使用 jquery 函数计算 Android 设备方向变化时的窗口宽度 window outerWidth true 此计算给出了两个方向变化的正确宽度iphone and ipad但在安卓中不行 如果我最初以横向模式或纵向模式加
  • 如何检查 URL 末尾是否有特定字符串

    我需要根据 URL 末尾的内容让覆盖层向下滑动 如果 URL 末尾有 faq 覆盖层下降 如何在 jQuery JavaScript 中做到这一点 如果您的网址看起来像这样http yourdomain com faq 你可以这样做 var
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 已安装 cypress npm 软件包,但缺少 Cypress 二进制文件

    大家好 我是 azure devops CI 的新手 我正在尝试通过在作业之间缓存 node modules 来减少管道构建时间 但我遇到了无法解决的错误 我正在使用 cypress 进行测试 这是我的天蓝色管道 Node js Build
  • 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

    我正在 Java 项目中设计一个高级搜索选项sqlite在 NetBeans 中 有5种不同JTextfields和 5 列 我想填充JTable具有相应的匹配标准 如果一个JTextfield为空 那么它应该选择该列的所有项目 我使用的查
  • JavaScript 不是 DOM 的一部分吗?

    为什么即使从 DOM 中删除用于创建脚本的代码 脚本仍然可以运行 我遇到了一种情况 我想阻止损坏的脚本运行 查看我的帖子 https stackoverflow com questions 2685581 is there a way to
  • 如何实现再次播放功能?

    我希望在游戏结束时得到提示 如果我还想再玩一次的话 并使用 Y N 输入 退出游戏或重复游戏 我该如何以最有效的方式解决这个问题 编辑 描述资源路径位置类型 类型 Main Main java ScaredyCat src se grupp
  • CasperJS:如何单击所有选定的按钮?

    我正在尝试使用 CasperJS 作为网络抓取工具 并且有一个带有按钮的页面 单击该按钮将加载数据 因此 我想先单击所有这些按钮 然后等待 然后再实际进行查询以获取所有必要的数据 问题是对于 Casper casper thenClick
  • jQuery 存储类型未定义

    我用了一个jQuery 存储 https ui5 sap com api jQuery sap storage存储数据 oStore jQuery sap storage jQuery sap storage Type local oSto
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • 文件构造函数说明

    我无法理解以下文件构造函数 public File String parent String child and public File File parent String child 参数有什么作用parent and child该文件

随机推荐

  • java 11 HttpClient 即使禁用 TLS.1.3 也会导致无限的 SSL 循环

    我面临标准 java http 客户端的问题 由于某种原因 我还不知道它会进入无限循环并利用我拥有的所有CPU 下面是示例堆栈跟踪和无限循环运行的方法 HttpClient 1 Worker 34 232 daemon prio 5 os
  • 有没有适用于 Python 的“漂亮”数据可视化库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有很多用于 Javascript 的 漂亮打印 可视化库 例如 那些列出的here http datavisualization ch t
  • 如何识别ios sdk中的特定通知

    实际上正在开发一个警报项目 现在我对本地通知有疑问 我如何识别特定通知 我们甚至无法将标签设置为本地通知 那么我如何区分它们 example 通知 1 UILocalNotification localNotification UILoca
  • 是否有一个 C# 库提供像 numpy 这样的数组操作[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我开始使用 Numpy 并且非常喜欢它的数组处理功能 我可以在 C 中使用一些库来提供与数组类似的功能吗 我最想要的功能是 从另一个数组创建一个数组
  • 如何在 JavaScript 中添加 ? [复制]

    这个问题在这里已经有答案了 我需要使用appendChild 或 jQuey 的append 附加一些
  • Jquery if $(window) 向下滚动函数[重复]

    这个问题在这里已经有答案了 你好 我需要什么时候 window 向下滚动100 提醒某事 我该怎么做 Try window scroll function if window scrollTop window height document
  • 是否可以重新定义 PHP 常量?

    是否可以重新定义类常量 在 PHP 中 e g class B const C ThisIsAConstant 1 class A extends B self C ThisIsAConstant 2 不 当然不 那么它们就不再是 常数
  • Angular 根据环境动态交换 SASS 样式

    我将 Angular 6 与新的 angular json 文件一起使用 我在其中配置了单独的配置 在这个新配置中 我将 Constants scss 替换为 Constants newconfig scss 运行 ngserve conf
  • 如何在 SQL 中选择没有空值的行(在任何列中)?

    我有一张桌子叫table1 它有 100 列 col1 col2 col100 我明白如何SELECT rows not例如 在特定列中包含空值col1 SELECT FROM table1 WHERE col1 IS NOT NULL 我
  • python 集合推导式是如何工作的?

    Q1 以下是set of a generator expression or a set comprehension 或者它们是相同的吗 如果是的话 是list dict理解也相应的类型转换在发电机上 my set x for x in r
  • html 编码/解码 - ckeditor

    我在 cshtml 页面中使用 ckeditor 将内容输入到我的数据库中 这些内容稍后将显示在带有 html 标签的页面上 以使文本更易于阅读 由于我通过文本区域输入内容 因此收到一条错误消息 指出我正在输入的 html 标签 h1 p
  • 如何在 Matlab 中对齐来自 Kinect 的 RGB 和深度图像

    我正在尝试使用 Matlab 对齐来自 Kinect 的 RGB 和深度图像 我正在尝试使用以下算法来做到这一点this http burrus name index php Research KinectCalibration tocLi
  • php-fpm 不创建 .sock 文件

    我有一个在 Amazon Linux 上运行的 AWS 服务器 我使用本指南安装 php7 页面底部 https forums aws amazon com thread jspa messageID 695576 https forums
  • 如何在R中的xyplot中获得阴影背景?

    using xyplot来自lattice包中 我绘制了多年的时间序列 我会为其中一些年份添加阴影区域 以表明这个时期是 特殊的 例如战争 如果这是微不足道的 请道歉 但我不知道该怎么做 所以如果有人可以帮助我 或者至少为我指出正确的方向
  • 寻找将 Lucene.net 与 ASP.NET 结合使用的示例 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将三列设为主键

    我正在尝试学习如何将两个文件匹配在一起 但我已经尝试了 5 个小时了 但仍然不知道该怎么做 第一个文件 600 000 行 包含 4 列 Postal Number Houseletter livingspace 第二个文件 7 000 行
  • 如何让 gcloud auth activate-service-account 持续存在

    我正在使用 bq 命令行工具从 Bigquery 表进行查询 当我登录并退出查询进程正在运行的盒子时 有没有办法让服务帐户身份验证持续存在 我所做的步骤 我登录了linux盒子 通过运行以下命令来验证服务帐户 gcloud auth act
  • Java - 当数据超出限制时打印消息?

    我的代码已经可以工作了 虽然不漂亮 但确实是工作 现在我想编写一段代码 如果文本文件中有 19 条或更多数据 则停止加载数据 然后显示例如 显示 输入无效 的消息 我不知道如何做到这一点 所以任何帮助将不胜感激 package stacka
  • htaccess 外部重写/内部重定向

    我想通过 htaccess 文件实现两件事 第一个是 www hostname com index php question gt www hostname com question www hostname com index php m
  • GWT 远程日志记录无法记录 Throwable Stacktrace?

    我想使用 GWT远程记录 http www gwtproject org doc latest DevGuideLogging html 这就是我所做的 在我的 web xml 文件中我做了