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までご連絡ください。
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.