.NET エージェントを使用すると、 logs in context を取得でき、他の New Relic データのコンテキストでアプリのログを表示できます。 この機能の一般的な情報については、 「APM ログのコンテキスト」を 参照してください。
ヒント
.Net ログがたくさんありますか? それらを最適化および管理する方法については、チュートリアル をご覧ください。
コンテキストオプションの自動ログ
アプリのログとリンク メタデータを自動的に New Relic に送信するようにコンテキスト内の ログを構成するには、3 つのオプションがあります。 エージェント転送で使用するコンテキスト内の自動ログにサポートされているフレームワークは次のとおりです。
フレームワーク |
フレームワークの最小バージョン |
エージェントの最小バージョン |
---|---|---|
Log4Net |
.NET Frameworkの場合:v1.2.10 .NET Coreの場合:v2.0.10 |
v9.7.0 |
セリロッグ |
.NET Frameworkの場合:v2.0.0 .NET Coreの場合: v2.5.0 |
v9.7.0 |
NLog |
.NET Frameworkの場合:v4.1.0 .NET Coreの場合:v4.5.0 |
v9.7.0 |
Microsoft.Extensions.Logging |
v3.0.0 |
.NET Framework の場合: エージェント v9.7.0 .NET Core の場合: エージェント v10.0.0 |
ヒント
Sitecore の多くのバージョンでは Sitecore.Logging を使用します。これは log4net のフォークに基づいていますが、独立しています。このライブラリのサポートは、.NET Agent のバージョン 10.14.0 で追加されました。
これは最も単純なアプローチであり、ログフォワーダーの設定にアクセスしたり関心を持ったりしていない開発者や、アプリのコンテキストでログやその他のリンクメタデータの機能を確認したいアカウントに最適です。多くのオーバーヘッド。
このオプションを使用すると、ログには
span.id
、
trace.id
、
hostname
、
entity.guid
、および
entity.name
が含まれます。
ログ転送の制限について学習します。
必要なのは、ログ転送機能を備えたエージェント バージョン ( .NET エージェント 9.7.0 以降 ) をインストールすることだけです。 転送が無効になっている場合は、エージェント設定ファイルに次の内容を追加することで有効にできます。
<applicationLogging enabled="true"> <forwarding enabled="true" maxSamplesStored="10000" /> <localDecorating enabled="false" /></applicationLogging>
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=false
重要
環境変数の値が存在する場合は、構成ファイルの値よりも優先されます。
エージェントバージョン9.8.0以降、この機能はデフォルトで有効になっています。
エージェント バージョン 10.4.0 以降、エージェントは、ログ イベントからのコンテキスト データ (カスタム属性) のキャプチャと転送もサポートします。このサブ機能はデフォルトで無効になっています。有効にするには、次の構成を使用します。
<applicationLogging enabled="true"> <forwarding enabled="true" maxSamplesStored="10000"> <contextData enabled="true" include="" exclude="" /> </forwarding> <localDecorating enabled="false" /></applicationLogging>
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=false
New Relic は、「context」で始まるコンテキスト データを使用します。たとえば、New Relic の値
myValue
を持つ
myKey
という名前のカスタム ログ属性は
context.myKey : myValue
です。
通常、インストルメント化された .NET ロギング ライブラリは、各ログ イベントのコンテキスト データのキーと値のペアを
Dictionary<string,object>
として保存します。New Relic に送信する前に値を文字列に変換するには、まず
Newtonsoft.Json.JsonConvert.SerializeObject
の使用を試みます。それが失敗した場合、オブジェクトで
.ToString()
の呼び出しを試みます。最後の手段として、タイプ名を送信します。
include
および
exclude
構成オプションを使用してコンテキスト データをフィルタリングできます。これらは、属性名のカンマ区切りのリストです。どちらのデフォルト値も空の文字列です。空の
include
フィールドは「すべてを含める」ことを意味します。これらの包含/除外オプションは、他の
エージェント属性構成オプション
と同じルールに従います。
たとえば、「a」で始まる「apple」を除くすべての属性を含め、「b」で始まる「banana」を除くすべての属性を除外するには、次の構成を使用します。
<applicationLogging enabled="true"> <forwarding enabled="true" maxSamplesStored="10000"> <contextData enabled="true" include="a*, banana" exclude="b*, apple" /> </forwarding> <localDecorating enabled="false" /></applicationLogging>
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_INCLUDE="a*, banana"NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_EXCLUDE="b*, apple"NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED
=false
Optional adjustments:
ログ転送を有効にすると、1分ごとにNewRelicに送信されるログの最大数も制御できます。デフォルト値は10,000です。60秒のウィンドウで10,000を超えるログが受信されると、ログのサンプリングが開始されます。
より多くのログを受信するには、より大きな数値に設定します。受け取るログの数を減らすには、数値を小さく設定します。任意の整数が有効です。
<applicationLogging enabled="true"> <forwarding enabled="true" maxSamplesStored="10000" /> <localDecorating enabled="false" /></applicationLogging>
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=false
重要
環境変数の値が存在する場合は、構成ファイルの値よりも優先されます。
既存のログ転送ソリューションがあり、エージェントをコンテキストで自動ログを使用するように更新する場合は、 disable your manual log forwarder にしてください。そうしないと、アプリは二重のログラインを送信します。アカウントによっては、二重請求になる場合があります。詳細については、手順に従い、 特定のログフォワーダー を無効にしてください。
あなたが好きなログフォワーダーをすでに持っていますか?私たちはあなたをカバーしています!言語エージェントは、自動ログインコンテキスト機能へのアクセスを提供するために必要なリンクメタデータでログを装飾できます。
このオプションは、エージェント内転送では使用しないでください。エージェント内転送が有効になっているときに 外部ログフォワーダー を使用してログをNewRelicに送信すると、ログがNewRelicに2回送信されます。アカウントによっては、二重請求が発生する場合があります。
重要
.NET エージェントのローカル ログ装飾は、ログ メッセージを直接変更しません。メッセージ内に
NR-LINKING
トークンを書き出すには、ロギング フレームワークの構成を更新する必要があります。log4net および Serilog での JSON 出力の場合、追加の構成またはコードが必要になります。
-
このオプションを使用する場合は、エージェント内転送構成オプションが無効になっていることを確認してください。
-
構成でログの装飾を有効にしてから、エージェントを再起動してログの装飾を開始します。
<applicationLogging enabled="true"><forwarding enabled="false" /><localDecorating enabled="true" /></applicationLogging>環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=trueNEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=falseNEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=true重要
環境変数の値が存在する場合は、構成ファイルの値よりも優先されます。
デコレータは、すべてのログ
message
(プレーン テキスト) に 5 つの属性を追加します:entity.guid
、entity.name
、hostname
、trace.id
、およびspan.id
。例:This is my log message. NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}重要
JSON の場合、
NR-LINKING
データはmessage
プロパティに存在する必要があります。ログメッセージが空または空白の場合、出力メッセージも空になります。 例:
NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}|.出力されるログメッセージは空の文字列になります。
ログがトランザクションの外部で発生した場合、またはアプリケーションのコンテキストに適用できない場合、一部の属性は空になる可能性があります。装飾フォーマッターを使用するには、手動プロセスよりもこのオプションをお勧めします。
重要
キー名にハイフンを使用できないロギング フレームワークをサポートするため、ロギング フレームワークから
NR-LINKING
トークンを読み出すために使用されるキーは、NR_LINKING
ではなくNR-LINKING
です。log4net構成
log4net の場合、.NET エージェントは、
NR-LINKING
トークンをログ イベント オブジェクトのNR_LINKING
というプロパティとして保存します。次の一般的なレイアウトの例は、NR-LINKING
トークンを書き出すように log4net を構成する方法を示しています。他のレイアウトもサポートされていますが、以下にリストされていません。SimpleLayout は変更できないためサポートされていません。PatternLayout
/DynamicPatternLayout
:conversionPattern
を更新して、行末にNR_LINKING
プロパティを含めます。<layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message %property{NR_LINKING}%newline %exception" /></layout>log4net.Ext.Json
: レイアウトを更新して、メッセージ JSON プロパティにNR_LINKING
というメンバーを含めます。log4net.Appender.AdoNetAppender
: このアペンダーは他のレイアウトとは少し異なる設定になっています。 メタデータを含めるには、message
を更新する必要があります。 次の例では、PatternLayout
を使用してこれを示しています。<parameter><parameterName value="@message" /><dbType value="String" /><size value="4000" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%message %property{NR_LINKING}" /></layout></parameter>セリログ構成
Serilog の場合、.NET エージェントは、
NR-LINKING
トークンをログ イベント オブジェクトのNR_LINKING
というプロパティとして保存します。次の一般的なフォーマッタとシンクの例は、NR-LINKING
トークンを書き出すように Serilog を構成する方法を示しています。他のシンクとフォーマッタもサポートされていますが、以下にリストされていません。Plain text using an
outputTemplate
:outputTemplate
を更新して、行末にNR_LINKING
プロパティを含めます。Log.Logger = new LoggerConfiguration().MinimumLevel.Override("Microsoft", LogEventLevel.Information).Enrich.FromLogContext().WriteTo.File(path: @"plaintext_log.txt",fileSizeLimitBytes: 1_000_000,rollOnFileSizeLimit: true,shared: true,flushToDiskInterval : TimeSpan.FromSeconds(1),outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {NR_LINKING} {NewLine}{Exception}").CreateLogger();JSON Formatter with automatic property output : デフォルトの JsonFormatter は、
NR_LINKING
メタデータをメッセージ プロパティに書き込まず、代わりに各プロパティを独自の JSON オブジェクトに書き込みます。 コンテキスト内のログが機能する前に、NR_LINKING
データをmessage
プロパティの末尾に書き込むカスタム JSON フォーマッタを作成する必要があります。Microsoft.Extensions.Logging構成
Microsoft.Extensions.Logging の場合、.NET エージェントは、メッセージを含む
NR-LINKING
トークンを新しく作成されたスコープに保存します。Microsoft.Extensions.Logging は出力のために他のフレームワークに依存しているため、詳細については上記の log4net または Serilog 構成を参照してください。NLog構成
NLog の場合、.NET エージェントは、メッセージの末尾に直接
NR-LINKING
トークンを自動的に追加できるため、追加の構成は必要ありません。
言語エージェントがログを転送および装飾できるようになる前は、アプリケーションを更新してリンクメタデータを送信することにより、コンテキスト内でログを有効にすることができました。
このオプションは引き続きサポートされていますが、おすすめしません。このアプローチを使用する手順について は、コンテキストオプションの手動ログを 参照してください。
また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIで インフラストラクチャエージェント を使用するように求められます。
既存のログ転送ソリューションを使用し、後でエージェントを更新してコンテキスト内の自動ログを使用することにした場合は、必ず disable your manual log forwarder を実行してください。 そうしないと、アプリは二重のログ行を送信することになります。 アカウントによっては、二重請求が発生する可能性があります。 詳細については、 特定のログフォワーダー を無効にする手順に従ってください。
このドキュメントはインストールの役に立ちましたか?
データを保護する
ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、 難読化の式とルール を参照してください。New Relic UI を使用するか、当社の GraphQL API である NerdGraph を使用して、ログ データをハッシュまたはマスクできます。
データを調べる
ログデータを最大限に活用するには:
- APM Summary ページ で、 Web transaction time チャートをクリックして、特定の時点に関連付けられたログを表示します。
- アプリの Errors inbox をチェックして、エラーに関連するログを表示します。
- 分散トレース を使用して、個々のトレースに関連付けられているログを確認します。
- ログ UI を使用して、プラットフォーム全体でさらに多くのログ データを探索します。
- ログ出力と重大度に基づいて アラート を設定します。
- ログデータ専用のUIを使用し てデータをクエリ し、結果を含む ダッシュボードを作成 します。
トラブルシューティングのヒント
通常、コンテキスト内で APM ログを有効にしてから 1 分以内にログが表示され始めます。 アプリの Triage > Logs セクションを確認してください。 また、そこにエラーに関連する ログパターンも 表示され始めます。
エラーまたはトレースのログが表示されない場合は、アプリにログがない可能性があります。 UIページを更新するか、 選択した期間 を変更してみてください。
自動ロギングを無効にする
APMログ イン コンテキストは エージェント ログ データを自動的に転送し、デフォルトで有効になっています。 これにより、セキュリティ、コンプライアンス、課金、システム パフォーマンスに悪影響が及ぶ可能性があります。 詳細情報、またはデフォルト設定を調整する必要がある場合は、 自動ログ記録を無効にする 手順に従ってください。
コンテキストオプションの手動ログ
手動プロセスを使用して.NETのコンテキストでログを設定する必要がある場合は、次の手順に従います。
- NewRelicでのロギングをすでに設定し ていることを確認してください。これには、アプリケーションログを収集し、NewRelicに転送されるメタデータを拡張するサポートされているログフォワーダーの構成が含まれます。
- 最新の .NET エージェント バージョンを インストール または 更新 し、 分散トレースを有効にします 。コンテキスト内のログには、 .NET エージェント バージョン 8.21 以降 と New Relic .NET エージェント API バージョン 8.21 以降 を使用します。
- Microsoft .NET Framework 4.5 以上 または .NET Core 2.0 以上 へのインストールまたはアップデートを行ってください。
- 以下のようなロギングエクステンションをインストールして設定することで、ログデータを充実させることができます。
- NewRelicUIでログデータを確認します。
log4netエクステンションの設定
Apache log4net version 2.0.8 or higher エクステンションを使って、ログデータをNew Relicプラットフォームの他の部分の関連データとリンクさせることができます。
次の図は、New Relic log4net エクステンションの特定のコンポーネントを強調して、Apache log4net を介したログメッセージの流れを示しています。多くのログフォワーダーが利用できます。この例では、 Fluentd を使用しています。

Appender:
NewRelicAppender
は、.NET エージェント ( APIを使用) からのコンテキスト情報を、アプリケーションによって生成されたログイベントに追加します。 このコンテキスト情報はリンク メタデータと呼ばれ、 New Relicによって、ログメッセージをその作成元であるトランザクションおよびスパンにリンクするために使用されます。 このアペンダーは、強化されたログイベントを下流のアペンダーに渡して、さらに処理します。
NewRelicAppender
は
ForwardingAppender
タイプであるため、チェーンの最初のアペンダーである必要があります。また、動作するために、その子として実際の出力先に書き込むことができる別のアペンダーが必要です。
Layout:
NewRelicLayout
は、強化されたログイベントをNew Relicが想定する JSON 形式にフォーマットします。 このレイアウトが割り当てられているアペンダーは、log4net に対して、ログフォワーダーが期待する場所にあるファイルに JSON を出力するように指示します。
Log Forwarder : ログフォワーダーは出力フォルダーを監視し、適切にフォーマットされ強化されたログ情報をNew Relicログ エージェントに段階的に送信します。
Log4netは、
appender
と
layout
を使用してログメッセージを保存およびフォーマットします。
NewRelicAppender
アプリケーションに接続されている場合、NewRelic.NETエージェントからのコンテキスト情報でログメッセージを強化します。アペンダーは、ログメッセージの特定のユースケースを処理するために、強化されたログメッセージをダウンストリームアペンダーに渡します。
log4netでのロギングの詳細については、Apache log4net Getting started のドキュメントを参照してください。
log4netエクステンションのコンテキストでログを設定するには、次のようにします。
-
Visual Studio NuGetパッケージマネージャー を使用して、
NewRelic.LogEnrichers.Log4Net
パッケージを見つけてインストールします。 -
log4net構成ファイルで、ログ構成を更新して
NewRelicAppender
を第1レベルのアペンダーとして使用し、既存のアペンダーをその子として参照します。また、ログメッセージを出力先に書き込むアペンダーのレイアウトをNewRelicLayout
に置き換えます。次のlog4net構成例は、NewRelicリンクメタデータでログイベントを強化します。既存のログファイルに加えて、ログフォワーダーが使用できるように、
C:\logs\log4netExample.log.json
の特定のJSON形式で新しいログファイルを出力します。<log4net><root><level value="ALL" /><appender-ref ref="NewRelicAppender" /></root><appender name="NewRelicAppender" type="NewRelic.LogEnrichers.Log4Net.NewRelicAppender, NewRelic.LogEnrichers.Log4Net" ><threshold value="ALL"/><appender-ref ref="FileAppender" /></appender>