- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
PHP にロギングを実装するさまざまな方法があり、PHP の組み込みエラーロギング API が完全に回避されている場合、Datadog PHP トレースライブラリは、トレースとスパン ID をログに自動的に挿入できることが確実ではありません。 PHP ログとトレースを手動で接続する方法については、以下のセクションをご覧ください。
\DDTrace\current_context()
は、バージョン 0.61.0 で導入されています。ログとトレースを一緒に接続するには、ログに、それぞれトレース ID とスパン ID を含む dd.trace_id
属性と dd.span_id
属性が含まれている必要があります。
Datadog ログインテグレーションを使ってログをパースしていない場合は、カスタムログパースルールによって dd.trace_id
と dd.span_id
が文字列としてパースされ、トレースリマッパーのおかげで再マップされていることを確実にする必要があります。詳細については、関連するログがトレースIDパネルに表示されないを参照してください。
たとえば、次でこの 2 つの属性をログに追加します。
<?php
$context = \DDTrace\current_context();
$append = sprintf(
' [dd.trace_id=%s dd.span_id=%s]',
$context['trace_id'],
$context['span_id']
);
my_error_logger('Error message.' . $append);
?>
ロガーが monolog/monolog ライブラリを実装する場合、Logger::pushProcessor()
を使ってすべてのログメッセージに識別子を自動的に付加します。monolog v1 の場合:
<?php
$logger->pushProcessor(function ($record) {
$context = \DDTrace\current_context();
$record['message'] .= sprintf(
' [dd.trace_id=%s dd.span_id=%s]',
$context['trace_id'],
$context['span_id']
);
return $record;
});
?>
monolog v2 の場合:
<?php
$logger->pushProcessor(function ($record) {
$context = \DDTrace\current_context();
return $record->with(message: $record['message'] . sprintf(
' [dd.trace_id=%s dd.span_id=%s]',
$context['trace_id'],
$context['span_id']
));
});
?>
monolog v3 の場合:
<?php
$logger->pushProcessor(function ($record) {
$context = \DDTrace\current_context();
$record->extra['dd'] = [
'trace_id' => $context['trace_id'],
'span_id' => $context['span_id'],
];
return $record;
});
?>
アプリケーションで、ログメッセージに trace_id および span_id を付加するのではなく json ログフォーマットを使用している場合は、以下の ID を含む一時レベルキー “dd” を追加できます。
<?php
$context = \DDTrace\current_context();
$logger->pushProcessor(function ($record) use ($context) {
$record['dd'] = [
'trace_id' => $context['trace_id'],
'span_id' => $context['span_id'],
];
return $record;
});
?>