- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我的 Catalyst
项目,我使用自己的基于 Moose
的异常类型,它与 Catalyst
和我的命令行应用程序兼容。
为了向我的 Catalyst REST 接口(interface)的客户端提供错误消息,我实现了一个 code
子例程,它提供 http 状态代码作为我的异常类的一部分。这样,我想使用 Plack::Middleware
,如 Plack::Middleware::HTTPExceptions
的 pod 文档中所述。
一切正常。异常以我希望的方式返回给客户端。
我的问题是:每当我抛出一个被中间件捕获的异常时,我的日志记录 (Log::Log4perl
) 就会丢失,而且我在 中既找不到痕迹也找不到错误Catalyst
的网络服务器 perl 脚本输出。
每当我抛出错误时,这些错误不是由我的异常类封装的,而是罕见的字符串(如 die "BOOM!"
),将写入日志输出并记录错误(显然,错误被 Catalyst
捕获并且不会重新抛出)。
我如何告诉 Catalyst
继续记录请求,即使必须将异常重新抛给中间件?
最佳答案
这个问题似乎分为两部分,但我认为这涵盖了它。这实际上更像是一个设置 Log4perl 来记录错误的问题,但是有 Catalyst 和 Plack 的注意事项。
首先,这是一个典型的 log4perl 配置设置:
log4perl.logger = DEBUG, FileAppndr, Screen, DebugPanel
log4perl.appender.FileAppndr = Log::Log4perl::Appender::File
log4perl.appender.FileAppndr.filename = log/server.log
log4perl.appender.FileAppndr.autoflush = 1
log4perl.appender.FileAppndr.stderr = 1
log4perl.appender.FileAppndr.layout = PatternLayout
log4perl.appender.FileAppndr.layout.ConversionPattern=%d [%p] - %m%n
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr = 1
log4perl.appender.Screen.autoflush = 1
log4perl.appender.Screen.layout = PatternLayout
log4perl.appender.Screen.layout.ConversionPattern=%d [%p] - %m%n
请注意其中包含的 stderr
值作为 1
。所以这告诉 log4perl 捕获 stderr
用于日志记录。
在 Catalyst 方面,我实际上有一些非常自定义的上下文初始化代码,但基本上设置了两件事;
将上下文记录器设置为 Log::Log4perl::Catalyst基本上通过 $c->log
加载 PSGI 中间件 Plack::Middleware::Log4perl .实际上,我在加载催化剂配置时通过 psgi_middleware
配置键来执行此操作。因此,配置行中除了“Log4perl”之外别无其他,因为所有内容都已在“Plack::Middleware”上下文路径中。
第二部分将“拾取”加载的“log4perl”实例并分配给 psgi.logger
,这样任何 PSGI 组件都可以根据需要访问记录器。
那么,任何后面的语句都将在如下代码中“重新抛出”:
my $e = HTTP::Exception->new(404);
$e->status_message("BOOM!!");
$e->throw;
实际上将在“log4perl”输出中提取,以及任何原始 die
语句。
至少在 Catalyst 5.90060 及更高版本上是这样。关于 HTTP::Exception 类型类,还有一些额外的细节需要添加。
关于perl - 在 Catalyst 中使用 Plack::Middleware 兼容异常时缺少日志输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714158/
更新到 Xcode 12.2 后,由于与 Apple Silicon 相关的链接错误,我的项目开始无法编译。我似乎已经修复了大部分问题,但是一个构建静态链接框架的子项目给我带来了问题。然而,具有明显相
我想使用 UISceneSession 的委托(delegate)方法当用户将注意力从应用程序(窗口)移开,然后又回到应用程序(窗口)时,生命周期有助于通知我的 Mac Catalyst 应用程序。
Mac Catalyst 允许调整窗口大小,有没有办法为 Mac Catalyst 应用程序提供最小窗口大小? 最佳答案 只需将以下代码块添加到您的 application:didFinishLaun
如何在业务催化剂中编辑模板?我可以从用户界面执行此操作还是需要 Dreamweaver 或其他一些产品? 我用谷歌搜索,但找不到答案...... 当我登录时,在网站选项卡下,有站点编辑器、网页、博客和
我正在使用 Test::WWW::Mechanize::Catalyst 为基于 Perl Catalyst 的 Web 应用程序编写测试用例。我卡在某个地方,我想通过打印变量/哈希值来排除故障。但问
我现在正在开发 Businesss Catalyst Web App,但遇到了一个严重的问题。我需要混淆 Web 应用程序的电子邮件字段。不幸的是,没有简单的方法可以做到这一点,因为来自 Web 应用
目标是在 Mac Catalyst 上制作一个半透明的侧边栏。 下面的代码给出了一个不透明的侧边栏(图 1)。 在 Mac(不是催化剂)上,侧边栏看起来不错(图 2)。 Mac Catalyst 上是
我构建了一个允许人们上传图像的网络应用程序,该图像将显示在网络应用程序列表中。我需要将图像自动调整为更适合的大小,例如缩略图。 最佳答案 Adobe Business Catalyst 将解释 src
我通过使用以下方式在催化剂应用程序中使用上下文菜单 let interaction = UIContextMenuInteraction(delegate: self) editButton.addI
我正在开发 Catalyst/psgi一个可以充分利用异步流的应用程序,但是除了简单的计时器(如这里: http://www.catalystframework.org/calendar/2013/1
在我的阶段服务器中,我想激活调试,以便客户端可以在应用程序进入生产服务器之前自行发现错误。 但我只想要消息的第一部分,而不是请求或 session 数据。 例如:无法渲染模板“templates/ho
我注意到在结帐过程中,您无需成为成员(member)即可结帐。 我该如何防止这种情况发生?我需要任何购买的人都可以选择登录(如果他们有帐户)或在结帐过程中注册。 最佳答案 您可以使用 islogged
您好,我不想在 Controller 中重复相同的代码,所以我在 MyApp 主程序包中创建了一个子程序: sub do_stuff { my $input = shift; do s
在 Mac Catalyst 上,我的应用程序的文本字段 becomeFirstResponder() 功能不起作用。我尝试将这段代码放在 viewwillappear 中: override fun
我正在使用 Perl,我可以使用以下命令连接到本地 PostgreSQL 9.3 服务器这段代码 #!/usr/bin/perl use DBI; use strict; my $dbh = DBI-
这是我的第一个 Catalyst 应用程序,我不确定如何解决以下问题。 用户在表单中输入一些数据并选择一个文件(最大 100MB)进行上传。提交表单后,实际计算最多需要 5 分钟,结果存储在数据库中。
下面的代码是如何用 Perl 实现的? sub add_item : Local { my ( $self, $c ) = @_; my $item_id = $c->req->p
每次我构建 Catalyst 应用程序时,我都会遇到应用程序启动(重新)缓慢得令人痛苦的地步,延迟大约为 10 秒。今天我发现延迟是由以下几行引起的: use lib '/home/zoul/opt/
我希望以下代码 my @array; for my $rapport ( qw( value1 value2 value3 ) ) { push @array, { key => $rappo
我正在开发一个将在运行时生成数据库表的应用程序。我将 Catalyst 与 DBIC 一起使用,我需要在生成新表时生成新的 ResultSet。这个新的结果集必须作为催化剂模型添加,这样我才能$c->
我是一名优秀的程序员,十分优秀!