我有URL/init流吗?id=。。。在我的应用程序中,它被一些外部应用程序使用。它应该回答OK或一些错误代码。如果没有id参数,则响应应为ERROR_NO_id。所以,我的代码是
$app->get('/init-stream', function(Request $request) use ($app) {
$idParam = $request->get('id');
if ($idParam === NULL) {
return new Response('ERROR_NO_ID', 400);
}
...
});
一切都很好,但我想将这种情况记录为WARNING,因为它可以帮助我调试调用此请求的应用程序。因此,我将代码更改为:
$app->get('/init-stream', function(Request $request) use ($app) {
$idParam = $request->get('id');
if ($idParam === NULL) {
throw new App'Exception'BadRequestException('ERROR_NO_ID', 400);
}
...
});
$app->error(function(App'Exception'BadRequestException $e) use ($app) {
$app['logger']->addWarning(...);
return new Response($e->getMessage(), $e->getCode);
});
一切正常,但有一件事我不喜欢。我的日志看起来像:
[2015-12-22 16:20:00] myapp.CRITICAL: App'Exception'BadRequestException: ERROR_NO_ID (uncaught exception) at C:'Users'yy'onetimelink'public'index.php line 166 {"exception":"[object] (App''Exception''BadRequestException(code: 400): ERROR_NO_ID at C:''Users''yy''onetimelink''public''index.php:166)"} []
[2015-12-22 16:20:00] myapp.WARNING: GET /init-stream?sex=male&age=33 : ERROR_NO_ID (C:'Users'yy'onetimelink'public'index.php:166) [] []
我的应用程序中没有任何关键内容。我该如何摆脱这条关键信息?
简短回答:错误回调的优先级太低。您必须使用优先级>=-4。例如:
$app->error(function(App'Exception'BadRequestException $e) use ($app) {
$app['logger']->addWarning(...);
return new Response($e->getMessage(), $e->getCode);}, -4); // <= !!!this
信息:KernelEvents:EXCEPTION早于错误回调。这将触发类Silex''EventListener''LogListener::onKernelException,依此类推
这是由于monlog日志级别造成的。当前支持的日志级别为:
- 调试(100):详细的调试信息
- 信息(200):有趣的事件。示例:用户登录、SQL日志
- 注意(250):正常但重要的事件
- 警告(300):非错误的异常情况。示例:使用不推荐使用的API、API使用不当、不受欢迎不一定是错的事情
- 错误(400):运行时错误不需要立即执行操作,但通常应记录和监视
- 临界(500):临界条件。示例:应用程序组件不可用,出现意外异常
- 警报(550):必须立即采取行动。示例:整个网站关闭,数据库不可用等。这应该会触发短信提醒并唤醒您
- 紧急情况(600):紧急情况:系统不可用
文档
DEBUG将记录所有内容,INFO将记录除DEBUG以外的所有内容,NOTICE将记录除调试和INFO之外的所有内容等等。
因此,为了避免出现CRITICAL日志消息,日志级别应设置为ALERT或EMERGENCY。
Monolog将异常分类在CRITICAL日志级别下,并在异常发生时将其添加到日志文件中,并且将日志级别设置为包括CRITICAL记录消息。我建议使用DEBUG级别进行开发,从ERROR级别向下进行生产。在生产时也设置$app['debug']=false。