簡體   English   中英

Newrelic沒有認識到我的Slim PHP路由

[英]Newrelic isn't recognizing my Slim PHP routes

我剛剛在我的PHP Web應用程序上設置了New Relic。 除了一件事之外,一切都很好......所有的交易都顯示為“index.php”。

這樣做的原因是因為我使用了超薄框架 (也 很多 的替代品 用於 路由 )與URL重寫,這樣我就可以有很好的人力網址,如“/用戶/設置”,而不對每個控制器和動作的文件夾。

但這仍然讓我將index.php作為每個New Relic網絡交易的名稱。

它花了我一些搜索,但我能找到一個與CodeIgniter相關的答案( 可在此處獲得 )。

一點修改使它適用於我(使用Slim),我想其他PHP路由器和框架將具有大致相同的解決方案:

if (extension_loaded ('newrelic')) {
    newrelic_name_transaction($_SERVER['REQUEST_URI']);
}

編輯:為避免包含任何GET參數,請在第二行使用此參數:

newrelic_name_transaction(current(explode('?', $_SERVER['REQUEST_URI'])))

注意:如果您使用Slim,艾默生的答案,他建議使用路由模式,是比使用文字URL更好的選擇。

您可以使用掛鈎將事務名稱設置為路由器的名稱或模式。

以下是將其設置為模式的示例:

$app->hook('slim.before.dispatch', function() use ($app) {
    newrelic_name_transaction($app->router()->getCurrentRoute()->getPattern());
});

從PHP Agent的6.7.0.174版本開始,New Relic現在對Slim Framework提供了開箱即用的支持。

我更新到NewRelic代理6.9.0.182,但事務仍未命名,所以我放了一個中間件(因為Slim 3不再支持hook),而且它更好用:

$app = new \Slim\App(['settings' => [
    // to be able access to route within middleware
    'determineRouteBeforeAppMiddleware' => true,
]]);

// middleware to send the correct route to NewRelic
$app->add(function ($request, $response, $next) {
    if (extension_loaded('newrelic') && $request->getAttribute('route')) {
        newrelic_name_transaction($request->getAttribute('route')->getPattern());
    }

    return $next($request, $response);
});

// loads some routes

$app->run();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM