在基于 JSF 的应用程序中捕获并记录/通知未处理的异常

2023-12-27

我想使用 log4j 检查并记录 JSF Web 应用程序中所有未处理的异常。我读了这篇文章使用 log4j 记录 Java 中的运行时异常 https://stackoverflow.com/questions/2344654/log-runtime-exceptions-in-java-using-log4j并添加一个实现的类Thread.UncaughtExceptionHandler。但该方法没有被触发。

实现这一目标的正确方法是什么?


添加一个实现的类Thread.UncaughtExceptionHandler。但该方法没有被触发

在 Java EE Web 应用程序管理的 HTTP 请求线程中通常无法捕获未捕获的异常,因为服务器最终会捕获来自 Web 应用程序的任何异常,并在 HTTP 500 错误页面中出现同步 HTTP 请求时将其显示出来(以防异步(ajax)请求,这又取决于框架)。此外,如果确实有一个未捕获的异常逃过了服务器的注意,它就会杀死服务器的运行时线程,导致整个服务器停止。这显然不是理想的现实场景。

JSF 为您提供ExceptionHandler http://docs.oracle.com/javaee/7/api/javax/faces/context/ExceptionHandler.html用于处理这些异常并在必要时控制它们的 API。

这是一个启动示例:

public class YourExceptionHandler extends ExceptionHandlerWrapper {

    private ExceptionHandler wrapped;

    public YourExceptionHandler(ExceptionHandler wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public void handle() throws FacesException {
        FacesContext facesContext = FacesContext.getCurrentInstance();

        for (Iterator<ExceptionQueuedEvent> iter = getUnhandledExceptionQueuedEvents().iterator(); iter.hasNext();) {
            Throwable exception = iter.next().getContext().getException(); // There it is!

            // Now do your thing with it. As per the question, you want to log it using log4j. 
            logger.error("An exception occurred!", exception);
        }

        getWrapped().handle();
    }

    @Override
    public ExceptionHandler getWrapped() {
        return wrapped;
    }

}

为了让它运行,创建一个自定义ExceptionHandlerFactory https://docs.oracle.com/javaee/7/api/javax/faces/context/ExceptionHandlerFactory.html如下:

public class YourExceptionHandlerFactory extends ExceptionHandlerFactory {

    private ExceptionHandlerFactory parent;

    public YourExceptionHandlerFactory(ExceptionHandlerFactory parent) {
        this.parent = parent;
    }

    @Override
    public ExceptionHandler getExceptionHandler() {
        return new YourExceptionHandler(parent.getExceptionHandler());
    }

}

哪些需要注册faces-config.xml如下:

<factory>
    <exception-handler-factory>com.example.YourExceptionHandlerFactory</exception-handler-factory>
</factory>

也可以看看:

  • JSF ajax 请求中的异常处理 https://stackoverflow.com/questions/27526753/exception-stack-trace-in-jsf-ajax-requests
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在基于 JSF 的应用程序中捕获并记录/通知未处理的异常 的相关文章

  • 将 Flash 文件上传与 JSF 集成

    我看到我们可以通过flash文件上传来上传多个文件 喜欢SWF上传 http code google com p swfupload or YUI上传器 http yuilibrary com yui docs uploader 是否可以将
  • 如果另一个 Activity 崩溃,Android 将返回到前一个 Activity

    有没有办法让Android返回到以前的状态Activity在我的应用程序中 如果另一个Activity导致抛出未处理的异常 您可以尝试使用Thread setDefaultUncaughtExceptionHandler http deve
  • JSF 不呈现自定义 HTML 标记属性

    我想向我的登录表单添加一些 iOS 特定的标签属性 如果我查看我的网页源代码 就会发现自动更正 自动大写和拼写检查属性不存在 这是什么原因呢 我正在使用 JSF 2 x
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • ASP.NET Core 日志记录在 2 个不同的文件中

    当使用默认的 ASP NET core 日志记录与 Serilog 结合使用时 是否可以将错误写入errors log并将信息写入informations log using Microsoft Extensions Logging usi
  • 将 LocalDate 转换为 DD/MM/YYYY LocalDate [重复]

    这个问题在这里已经有答案了 我有一个字符串DD MM YYYY日期格式 我想检查新日期是否比今天老 I use LocalDate now 但是 当我运行此代码时出现异常 LocalDate today LocalDate now Date
  • 如果异常保存在 std::exception_ptr 中,那么在 catch 语句之外使用异常是否安全?

    我有一个std exception ptr其中有一个例外 我要调用std rethrow exception要获取实际的异常 catch 语句之后的异常是否有效 我的猜测是 因为我仍然持有std exception ptr它仍然有效 参见示
  • 如何在 C# 中重构 log4net 语句?

    好吧 读完丹本对此的回答后post https stackoverflow com questions 2230180 whats log4j actually doing when we turn on or off some log p
  • 无法让 PrimeFaces RequestContext.getCurrentInstance().openDialog() 工作

    无法获取 PrimeFacesRequestContext getCurrentInstance openDialog 上班 我直接从 primefaces 展示中提取了示例代码 但我从未打开过对话框 我正在使用在 Wildfly 8 2
  • 可以让 ReSharper 在 Intellisense 中显示异常吗?

    我很喜欢 ReSharper 提供的重写智能感知行为 但是 我似乎无法让它显示异常 任何带有
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • 如何在 JSF 中禁用页面/表单

    对于我的应用程序 我希望拥有具有不同权限的用户 一种权限允许用户查看我的数据库中的数据 而另一种权限允许他们编辑数据 登录时 我会检查他们的权限以确定他们是否可以编辑数据 如果用户具有只读权限 我正在寻找某种方法来禁用整个页面 有没有一种简
  • 为什么我无法从多处理队列中捕获 Queue.Empty 异常?

    我试图捕获 multiprocessing Queue 为空时引发的 Queue Empty 异常 以下不起作用 import multiprocessing f multiprocessing Queue try f get True 0
  • 获取谷歌测试异常抛出消息[重复]

    这个问题在这里已经有答案了 我正在为我的项目使用谷歌测试框架 我从代码中抛出异常 throw DerivedClassException message 并在测试框架中使用 ASSERT THROW commond DerivedClass
  • 如何将 NLog 用于 DLL

    我正在尝试使用 Nlog Refresh 1 0 为类库项目实现一个简单的日志 当 nlog 从 dll 中实例化时 它似乎不会创建日志文件 还有其他办法解决这个问题吗 我的配置文件如下所示
  • 如果输入无效,是否可以抛出异常?

    我有一个简单的 ANLTR 语法和随附的访客 一切都很好 除非输入无效 如果输入无效 错误就会被吞噬 并且我的计算器会输出错误的输出 我尝试过实现一个错误侦听器 超越Recover词法分析器的方法 还有 好吧 今天还有六件事 有人可以告诉我
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • 如何从嵌套的 try-catch 块内重新抛出先前的异常? (C#)

    我有尝试类型转换的代码 如果失败 我想尝试其他方法 如果也失败 则重新抛出第一次转换尝试的原始异常 问题是我知道重新抛出的唯一方法是 throw 坐在 catch 块的末端 当我只想从另一个 catch 块中重新抛出时会发生什么 try v
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc

随机推荐

  • Google Play 警告 Google Play 应用内结算实施不正确

    我刚刚收到来自 Google Play 的以下电子邮件 您好 Google Play 开发者 我们检测到您在此电子邮件末尾列出的应用程序是 不设置目标套餐调用应用内付费服务 为了意图 这可以使恶意包绕过 Play 商店计费系统并访问尚未购买
  • 给定一个未知长度的列表,通过仅扫描 1 次来返回其中的随机项

    给定一个未知长度的列表 通过仅扫描 1 次来返回其中的随机项 我的想法 类似的算法是储层采样 由其他人发布 但是 它太复杂了 因为它需要运行 rand 并在每次迭代中保留 k 个节点 有更好的解决方案吗 O n 时间和 O 1 空间 你为什
  • 使用Apple新的AudioEngine改变AudioPlayer声音的Pitch

    我目前正在尝试让 Apple 的新音频引擎与我当前的音频设置配合使用 具体来说 我正在尝试使用音频引擎改变音调 这显然是可能的这个帖子 https stackoverflow com questions 25333140 swift usi
  • glsl 和不同值的透视校正

    光栅化器是否使用透视校正对每个变化的顶点值 或在较新版本的 glsl 值中 走出 顶点着色器 进行插值 这取决于硬件吗 当发生裁剪时 裁剪顶点的值是如何计算的 我尝试撤消透视校正 并注意到被剪切的多边形的奇怪行为 我想更好地了解幕后发生的事
  • DataGridView - 使用DataPropertyName显示子元素属性

    让我们想象一下我有以下课程 public class Master public string MasterName Something public List
  • Flutter:我们如何将 Firebase 数据库与桌面应用程序一起使用

    我正在考虑使用 dart 和 flutter 开发一个桌面应用程序 但我不知道如何将 Firebase 数据库与其集成 任何建议将不胜感激 提前致谢 Use Firedart用于将 FIRebase 集成到基于桌面的 Flutter 应用程
  • python 中捕获性能异常

    我知道 python 中的异常处理速度很快try但就捕获量而言 可能会很昂贵 这是否意味着 try some code except MyException pass 比这个更快吗 try some code except MyExcept
  • numpy timedelta64 不显示分数

    我想将 847 小时转换为天 实际结果是 847 24 35 29 但是 numpy 仅显示 35 天 import numpy as np x np timedelta64 847 h x np timedelta64 x D print
  • PySpark 1.5 如何将时间戳从秒截断为最近的分钟

    我正在使用 PySpark 我在数据帧 canon evt 中有一个列 dt 这是一个时间戳 我正在尝试从日期时间值中删除秒 它最初是作为字符串从镶木地板中读入的 然后我尝试通过将其转换为时间戳 canon evt canon evt wi
  • WorkManager 尝试在 Application#onCreate 中将独特的定期工作排入队列时崩溃 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将 WorkManager 与 Dagger 2 一起使用 将依赖项注入到工作人员中 我跟着本文 https proandro
  • 从 JList 取回数据

    我在谷歌上搜索一个从 JList 组件检索数据的解决方案 但没有找到任何解决方案 那么 Jlist 是否有一种返回其项目的方法 我不想要只选择一个 我想要整个清单 原因是我有这个方法可以根据列表框的选定值更新对话框的所有组件 我想用相同的方
  • 为什么我的 vba 代码将逗号视为新行?

    我有这段从文本文件中读取的代码 当行以 Q 开头时 它是一个问题 R 和 W 分别是读取到形状的错误和正确答案 但问题是 如果文本中的任何位置有逗号 我的 powerpoint 宏会将其视为新行 请帮忙解决这个问题吗 这是代码 Open A
  • UIViewController 生命周期调用与状态恢复相结合

    我正在尝试在使用 iOS 6 和故事板的应用程序中实现状态恢复 但我在寻找防止重复调用繁重方法的方法时遇到问题 如果我只是启动应用程序 那么我需要在中设置用户界面viewDidLoad void viewDidLoad super view
  • 如何制作自定义形状的按钮?

    我正在开发一个 iPhone 应用程序 它要求按钮的形状不是矩形 正方形 例如阿米巴形状的按钮 此外 当单击该按钮时 该按钮仅突出显示其大小 所以仅仅设置背景图片是不够的 我该怎么办 一种方法是为正常状态和选定状态制作预渲染图像 然后设置使
  • 带有overlayskscene Xcode Swift 的屏幕触摸Scenekit 导致应用程序崩溃

    嘿 好吧 在 Overlayskene 的场景套件 3D 游戏中识别 HUD 触摸的最佳方法是什么 因为我有一个名为 AButton 的按钮 但是当我触摸按钮或屏幕时 游戏会在几个小时的搜索后崩溃 我猜问题是场景套件上的 touchbegi
  • iOS/Android 上的 OpenMP

    OpenMP 在跨平台的 GCC 中受支持 但这是否意味着 OpenMP 在所有目标平台上都受支持 具体来说 iOS 和 Android 随着手机 平板电脑转向四核 在游戏中不使用所有核心将是一个巨大的劣势 作为一名非移动开发人员 我不知道
  • 创建重定向到另一个 URL 的 WordPress 页面

    我想创建一个新的 WordPress 页面 它实际上是另一个网站的链接 目标是让页面显示在我的页面列表中 但实际上将 Web 用户发送到目标 URL 例如 假设我想包含一个指示 我的照片 的页面 但实际上将它们重定向到 Flickr 我猜测
  • 如何在 docker 中将 /proc 文件系统重新挂载为 r/w 系统?

    我已经在 Ubuntu 12 04 上安装了 docker 0 11 1 我正在尝试将 shmmax 从固定值 32 M 更改为更大的值 1G 当我运行命令时 从 docker 中 sysctl w kernel shmmax 107374
  • 将使用“by”创建的摘要转换为 data.frame

    df1 data frame c 2 1 2 c 1 2 3 4 5 6 seq 141 170 create data frame names df1 c gender age height column names df1 gender
  • 在基于 JSF 的应用程序中捕获并记录/通知未处理的异常

    我想使用 log4j 检查并记录 JSF Web 应用程序中所有未处理的异常 我读了这篇文章使用 log4j 记录 Java 中的运行时异常 https stackoverflow com questions 2344654 log run