New Relic Logsの強力な機能のひとつであるLogs in ContextをAPMで利用する場合、言語ごとに対応したログライブラリの拡張機能を利用して有効化します。.NET の場合、log4net、NLogそしてSerilogに対応しています。今回はASP.NET Coreの標準プロジェクトテンプレートで利用されているMicrosoft.Extensions.Logging.ILogger<TCategoryName> (以下ILogger)を利用している場合にLogs in Contextを利用する方法をご紹介します。
ILoggerはログ操作を抽象化しており、.NET 組み込み(.NET Platform Extensions)のログプロバイダーの利用とサードパーティのログプロバイダーの連携の両方をサポートしています。組み込みのログプロバイダーをAPIを利用して拡張することもできますが、New Relicではこの方法でのLogs in Context対応ライブラリはまだ提供していません。ILoggerがサードパーティのログプロバイダーと連携できることを利用し、NLog、Serilogもしくはlog4netを出力先に指定し、それらに対応した拡張ライブラリを利用してLogs in Contextを有効化できます。
Serilogを利用する場合を例にして手順を説明します。まず、それぞれのログプロバイダーごとに用意されている手順を参照してILoggerの出力先として設定します。Serilogの場合は、GitHubリポジトリに設定方法が記載されています。
次にドキュメントを参照してSerilog向けのNew Relic Logs in Context拡張であるNewRelic.LogEnrichers.Serilogを追加し、WithNewRelicLogsInContextをEnrichに追加し、FormatterとしてNewRelicFormatterを指定します。
この両者の設定をASP.NET Coreプロジェクトでコードで設定した場合の例とappsettings.jsonで設定した場合の例をGistに公開しています。どちらの場合もProgram.csと設定ファイルのみの変更で完了し、ログ出力側は気にせずILoggerを利用するだけですみます。
New Relic Logsにログを送信するForwaderとしてはドキュメントに記載されている通り、ファイルに出力してInfrastructure Agentもしくはfluentbitやfluentdなどサードパーティのツールを利用するか、kubernetes環境ではコンソールに出力しfluentbitなどクラスタ全体のロギングツールで転送する方法をおすすめしています。
NLogやSerilogなどのログプロバイダーではなく、ILoggerのAPIを実装したロギングツールでLogs in Contextを利用したいお客様はぜひNew Relicまでご連絡ください。
Las opiniones expresadas en este blog son las del autor y no reflejan necesariamente las opiniones de New Relic. Todas las soluciones ofrecidas por el autor son específicas del entorno y no forman parte de las soluciones comerciales o el soporte ofrecido por New Relic. Únase a nosotros exclusivamente en Explorers Hub ( discus.newrelic.com ) para preguntas y asistencia relacionada con esta publicación de blog. Este blog puede contener enlaces a contenido de sitios de terceros. Al proporcionar dichos enlaces, New Relic no adopta, garantiza, aprueba ni respalda la información, las vistas o los productos disponibles en dichos sitios.