NewRelic PHP-agent Laravel newrelic.transaction_tracer.record_sql = “raw” 显示?而不是价值

NewRelic PHP-agent Laravel newrelic.transaction_tracer.record_sql = "raw" shows ? instead of value

提问人:Scott H 提问时间:11/17/2023 最后编辑:Scott H 更新时间:11/17/2023 访问量:30

问:

我已经在Laravel开发中将我的NewRelic PHP代理设置为具有newrelic.transaction_tracer.record_sql =“raw”,但是这些值以“?”而不是值的形式进入APM。NewRelic 文档说,价值应该来自 https://docs.newrelic.com/docs/apm/agents/php-agent/configuration/php-agent-configuration/#inivar-tt-sql

还有其他人遇到过这个问题吗?如果是这样,你是如何解决的?

当我将其设置为“关闭”时,SQL停止按预期运行。正如预期的那样,将其设置为“混淆”也会显示“?”而不是值。但是,再次将其设置为“raw”时,SQL中仍然有“?”而不是值。

我们有一个 CodeIgniter PHP 设置,当将此配置设置为 “raw” 时,该值确实会通过。

newrelic.high_security 未设置,因此默认为 false。

我尝试将newrelic.framework显式设置为“laravel”,但没有修复它。

验证我们使用的是最新的 NewRelic 代理和 PHP 次要版本:

  • PHP 版本 8.0.30 (cli) (内置: Sep 2 2023 08:05:13) ( NTS )
  • New Relic PHP-agent 版本 10.14.0.3-1563e8045968
PHP Laravel Newrelic

评论


答:

1赞 saidtechnology 11/17/2023 #1

不幸的是,在Laravel或New Relic PHP代理中没有直接的方法可以更改此行为。使用实际值显示原始 SQL 查询可能会暴露敏感数据并带来安全风险。但是,如果您需要查看实际值以进行调试,则可以考虑将查询记录在Laravel应用程序中。Laravel提供了几种记录查询的方法。

但是您可以在AppServiceProvider

<?php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

public function boot()
{
    DB::listen(function ($query) {
        Log::info(
            $query->sql,
            $query->bindings,
            $query->time
        );
    });
}
?>

这就是我好运。