为了设置看起来,我是一位经验丰富的开发人员,多年来编写了多种语言,包括90年代后期的早期00年代的Perl。从那时起,我还没有触及Perl,但现在有一个客户希望对使用Perl5和Catalyst构建的现有开源项目进行一些更改。我已经快速完成了Catalyst教程,在线阅读了几本书,现在我开始感觉自己的方式。
我在一个干净的Debian Wheezy VM上启动并运行现有项目,并使用Catalyst Development Server测试我的更改代码。
在完成教程并编写一些测试应用程序时,开发服务器在运行时总会输出很多有用的信息,例如配置的路由等。但是在这个项目中,当我运行服务器时,我不会# 39;获得大量输出。我甚至不会将邮件发送到$c->log->debug()
;
我使用以下命令运行服务器:
perl ./script/asnn_panel_server.pl -d -r
其中输出以下内容:
HTTP::Server::PSGI: Accepting connections at http://0:3000/
我可以访问服务器,应用程序运行正常。
在测试控制器操作中,我可以尝试以下几行:
$c->log->debug("A test debug message");
print "A test print message\n";
调试日志消息未出现在我的开发服务器输出中,但打印行没有出现。所以我知道对$c->log->debug()
的调用并没有爆发,因为下一行正在执行,但它在哪里?
基本上我觉得我可以'从Catalyst Development服务器获得更多有用的输出,但不是。
我有googles但无法找到任何相关内容。对不起,如果我在这里走的方向不对,我知道我一般都在做什么,但在很短的时间内有很多东西可以拿到!
我怀疑我的问题可能与我正在开发的开源项目有关,但是从这个方向来说并没有太大的帮助。任何人都可以给我任何关于调查内容的指示吗?
更新:我现在意识到应用程序正在使用log4perl,它被配置为将$c->log->debug()
发送到syslog
。我仍然不知道为什么Catalyst Development服务器没有提供足够的输出。
:WQ
答案 0 :(得分:2)
对于后来遇到此问题的人,如果您想查看开发人员调试流(关于应用程序正在使用的路由和类和模型的内容等等,您需要处于调试模式,您可以通过设置CATALYST_DEBUG轻松完成在您的环境中= 1(我经常启动我的应用程序,如“CATALYST_DEBUG = 1 perl -Ilib script / myapp_server.pl”
作为日志级别的调试和调试模式之间存在着可悲的区别。催化剂工作的方式是,如果你处于调试模式(通过CATALYST_DEBUG = 1,或者其他任何记录的方式打开),所有这些调试流都会被发送到日志,大部分都在调试级别记录(再次调试作为日志级别不同于调试开发人员模式:()因此,您需要两种调试模式,并且您的记录器应设置为在调试级别进行侦听。
如果您使用默认的催化剂日志,默认情况下它是调试级别,因此您只需要执行CATALYST_DEBUG = 1。如果您使用其他记录器,请确保为开发设置启用调试日志级别,如果您希望查看这些开发人员流日志。
答案 1 :(得分:1)
发送到$c->log->debug()
的邮件通常在生产环境中被禁用。如果您使用或不使用-d
开关启动脚本似乎无关紧要,那么我建议序列中的下游将环境变量CATALYST_DEBUG
设置为{单方面{1}}或0
。
也就是说,您应该可以看到undef
或$c->log->info()
来电的输出。该问题的答案应该可以帮助您确定问题是$c->log->warn()
还是与Catalyst相关。
希望这会让你顺利上路。