私たちの.NETで これにより、他の New Relic データのコンテキスト でアプリのログを確認できます。 この機能の一般的な情報については、 コンテキスト内の APM ログ を参照してください。
ヒント
.Net ログがたくさんありますか? それらを最適化および管理する方法については、チュートリアルをご覧ください。
コンテキストオプションの自動ログ
設定には 3 つのオプションがあります アプリのログとリンク メタデータを New Relic に自動的に送信するコンテキスト内のログ。 エージェント転送で使用するコンテキスト内の自動ログ用にサポートされているフレームワークには、次のものがあります。
- log4net: 1.2.10+ (.NET フレームワーク)、2.0.10+(.NET コア)。.NET エージェント v9.7.0 以降が必要です。
ヒント
多くのバージョンの Sitecore はログ記録に log4net を使用します。ただし、このバージョンの log4net は現在、エージェントによってサポートされていません。
- NLog: 4.1+ (.NET Framework)、4.5+ (.NET Core)。.NET エージェント v9.7.0 以降が必要です。
- セリログ: 2.0+ (.NET Framework)、2.5+ (.NET Core)。.NET エージェント v9.7.0 以降が必要です。
- Microsoft.Extensions.Logging: 3.0+。.NET Agent v9.7.0+ (.NET Core)、Agent v10.0.0+ (.NET Framework) が必要です。
これは最も単純なアプローチであり、ログフォワーダーの設定にアクセスしたり関心を持ったりしていない開発者や、アプリのコンテキストでログやその他のリンクメタデータの機能を確認したいアカウントに最適です。多くのオーバーヘッド。
このオプションを使用すると、ログには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
オプションの調整:
ログ転送を有効にすると、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
重要
環境変数の値が存在する場合は、構成ファイルの値よりも優先されます。
既存のログ転送ソリューションがあり、コンテキストで自動ログを使用するようにエージェントを更新している場合は、手動ログ転送を必ず無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
あなたが好きなログフォワーダーをすでに持っていますか?私たちはあなたをカバーしています!言語エージェントは、自動ログインコンテキスト機能へのアクセスを提供するために必要なリンクメタデータでログを装飾できます。
このオプションは、エージェント内転送では使用しないでください。エージェント内転送が有効になっているときに外部ログフォワーダーを使用してログを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
トークンを読み出すために使用されるキーは、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 を構成する方法を示しています。他のシンクとフォーマッタもサポートされていますが、以下にリストされていません。outputTemplate
を使用したプレーン テキスト: 行末にNR_LINKING
プロパティを含めるようにoutputTemplate
を更新します。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 : デフォルトの JsonFormatter は、
NR_LINKING
メタデータをメッセージ プロパティに書き込みません。代わりに、各プロパティを独自の JSON オブジェクトに書き込みます。コンテキスト内のログが機能する前に、カスタム JSON フォーマッタを作成して、NR_LINKING
データをmessage
プロパティの末尾に書き込む必要があります。Microsoft.Extensions.Logging構成
Microsoft.Extensions.Logging の場合、.NET エージェントは、メッセージを含む
NR-LINKING
トークンを新しく作成されたスコープに保存します。Microsoft.Extensions.Logging は出力のために他のフレームワークに依存しているため、詳細については上記の log4net または Serilog 構成を参照してください。NLog構成
NLog の場合、.NET エージェントは、メッセージの末尾に直接
NR-LINKING
トークンを自動的に追加できるため、追加の構成は必要ありません。
言語エージェントがログを転送および装飾できるようになる前は、アプリケーションを更新してリンクメタデータを送信することにより、コンテキスト内でログを有効にすることができました。
このオプションは引き続きサポートされていますが、推奨されなくなりました。このアプローチを使用する手順については、コンテキストオプションの手動ログを参照してください。
また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIでインフラストラクチャエージェントを使用するように求められます。
既存のログ転送ソリューションを使用することにし、後でエージェントを更新してコンテキストで自動ログを使用することにした場合は、必ず手動ログ転送を無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
このドキュメントはインストールで役立ちましたか。
データを保護する
ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、難読化の式とルールを参照してください。New Relic UI を使用するか、当社の GraphQL API である NerdGraph を使用して、ログ データをハッシュまたはマスクできます。
データを調べる
ログデータを最大限に活用するには:
- [ APMの概要]ページで、 Webトランザクションのタイムチャートをクリックして、特定の時点に関連付けられたログを表示します。
- エラーに関連するログを表示するには、アプリの[エラー]受信ボックスを確認してください。
- 分散トレースを使用して、個々のトレースに関連付けられているログを確認します。
- ログ UIを使用して、プラットフォーム全体でさらに多くのログ データを探索します。
- ログ出力と重大度に基づいてアラートを設定します。
- ログデータ専用のUIを使用してデータをクエリし、結果を含むダッシュボードを作成します。
トラブルシューティングのヒント
通常、コンテキストでAPMログを有効にした後、ログは1分以内に表示され始めます。アプリのトリアージ>ログセクションを確認します。また、そこでエラーに関連するログパターンが表示されるようになります。
エラーまたはトレースのログが表示されない場合は、アプリにログがない可能性があります。 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 を使用しています。
アペンダー: NewRelicAppender
は、(APIを使用して).NETエージェントからのコンテキスト情報をアプリケーションによって生成されたログイベントに追加します。リンクメタデータと呼ばれるこのコンテキスト情報は、New Relicがログメッセージを、それらが作成されたトランザクションとスパンにリンクするために使用されます。このアペンダーは、さらに処理するために、強化されたログイベントをダウンストリームアペンダーに渡します。
NewRelicAppender
はForwardingAppender
タイプであるため、チェーンの最初のアペンダーである必要があります。また、動作するために、その子として実際の出力先に書き込むことができる別のアペンダーが必要です。
レイアウト: NewRelicLayout
は、強化されたログイベントをNewRelicが期待するJSON形式にフォーマットします。このレイアウトが割り当てられているアペンダーは、ログフォワーダーが予期する場所にあるファイルにJSONを出力するようにlog4netに指示します。
ログフォワーダー: ログフォワーダーは、出力フォルダを監視し、適切にフォーマットされ、エンリッチされたログ情報を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><appender name="FileAppender" type="log4net.Appender.FileAppender"><file value="C:\logs\log4netExample.log.json" /><param name="AppendToFile" value="true" /><layout type="NewRelic.LogEnrichers.Log4Net.NewRelicLayout, NewRelic.LogEnrichers.Log4Net"></layout></appender></log4net>log4net拡張機能を構成し、ログファイルを更新した後、NewRelicにデータを送信するように拡張機能を構成できます。ログを転送するためのいくつかのオプションがあります。コンテキスト内のログにインフラストラクチャエージェントを使用する構成例を次に示します。
logs:- name: application-logfile: C:\logs\log4netExample.log.json # Path to a single log file
NLog拡張機能の設定
当社の NLog 4.5 以上 エクステンションを使用すると、ログデータを New Relic プラットフォームの他の部分の関連データとリンクさせることができます。
New Relic NLog拡張機能は、NewRelicロギングエンドポイントで必要とされる方法でログイベントをフォーマットするNewRelicJsonLayout
を提供します。次に、アプリケーションに接続すると、.NETエージェントからのコンテキスト情報が追加されます。次に、ログデータを出力フォルダーに書き込むようにターゲットを構成できます。ログフォワーダーはこのフォルダーを監視し、ログ情報をNewRelicに段階的に送信できます。
次の図は、New Relic NLog エクステンションの特定のコンポーネントを強調して、NLog を介したログメッセージの流れを示しています。
New Relic JSONレイアウト: NewRelicJsonLayout
は、.NETエージェントからのコンテキスト情報(APIを使用)をアプリケーションによって生成されたログイベントに追加し、NewRelicが期待するJSON形式でログメッセージを出力します。リンクメタデータと呼ばれるこのコンテキスト情報は、ログメッセージをトランザクションとそれらが作成されたスパンにリンクするためにNewRelicによって使用されます。
NewRelicAppender
はForwardingAppender
タイプであるため、チェーンの最初のアペンダーである必要があります。また、動作するために、その子として実際の出力先に書き込むことができる別のアペンダーが必要です。
ファイルターゲット: FileTarget
は、ログメッセージが書き込まれるディスク上のファイルを定義します。そのターゲットにNewRelicJsonLayout
を追加すると、NewRelicに転送するために出力を正しくフォーマットできます。
ログフォワーダー:ログフォワーダーは、適切にフォーマットされ、強化されたログデータをFileTarget
出力からNewRelicロギングエンドポイントに送信するように構成されています。
NLogでのロギングの詳細については、 nlog-project.org documentation を参照してください。
NLog 4.5 以上の エクステンションを使用して、ログデータを New Relic プラットフォームの他の部分の関連データとリンクさせます。
Visual Studio NuGetパッケージマネージャーを使用して、
NewRelic.LogEnrichers.NLog
パッケージを見つけてインストールします。アプリケーションコードで、ログ構成を更新して
NewRelicJsonLayout
を追加し、MappedDiagnosticsContext( MDC )またはMappedDiagnosticsLogicalContext( MDLC )データのどちらを収集するかを決定します。以下の設定例では、新しいJSONファイルがディスクに書き込まれます。 これらの設定オプション の中には、使用するディスク容量やターゲットのパフォーマンスを管理するのに役立つものもあります。
archiveAboveSize
maxArchiveFiles
bufferSize
enableArchiveFileCompression
autoFlush
concurrentWrites
NLog AsyncWrapper Target は必須ではありませんが、ログファイルのフォーマットや出力を別のスレッドで行うことで、パフォーマンスの向上に役立つ場合があります。
MDCおよびMDLCのデータを収集しない(デフォルト)。
次のコード例は、New Relicリンクメタデータでログイベントを強化しますが、MDCまたはMDLCデータでは強化しません。既存のログファイルに加えて、ログフォワーダーが使用できるように、
C:\logs\NLogExample.log.json
の特定のJSON形式で新しいログファイルを出力します。var loggerConfig = new LoggingConfiguration();var newRelicFileTarget = new FileTarget("NewRelicFileTarget");newRelicFileTarget.Layout = new NewRelicJsonLayout();newRelicFileTarget.FileName = "C:\logs\NLogExample.json";loggerConfig.AddTarget(newRelicFileTarget);loggerConfig.AddRuleForAllLevels("NewRelicFileTarget");LogManager.Configuration = loggerConfig;var logger = LogManager.GetLogger("Example");MDCまたはMDLCのデータを収集する。
アプリケーションがMDCまたはMDLCを使用している場合は、それらのコレクションにアイテムを含めるように
NewRelicJsonLayout
を構成できます。次のコード例は、MDCおよびMDLCデータの収集を可能にする追加の構成を追加します。前の例と同様に、ログフォワーダーが使用できるように、C:\logs\NLogExample.log.json
に特定のJSON形式で新しいログファイルを出力します。var loggerConfig = new LoggingConfiguration();var newRelicFileTarget = new FileTarget("NewRelicFileTarget");var newRelicLayout = new NewRelicJsonLayout{IncludeScopeProperties = true};newRelicFileTarget.Layout = newRelicLayout;newRelicFileTarget.FileName = @"C:\logs\NLogExample.json";loggerConfig.AddTarget(newRelicFileTarget);loggerConfig.AddRuleForAllLevels("NewRelicFileTarget");LogManager.Configuration = loggerConfig;var logger = LogManager.GetLogger("Example");NLog拡張機能を構成し、ログファイルを更新したら、NewRelicにデータを送信するように拡張機能を構成できます。ログを転送するためのいくつかのオプションがあります。コンテキスト内のログにインフラストラクチャエージェントを使用する構成例を次に示します。
logs:- name: application-logfile: C:\logs\log4netExample.log.json # Path to a single log file
ファイルベースの構成プロバイダーを使用して、NewRelicNLog拡張機能を構成することもできます。次のサンプルコードは、 App.config
ファイルに含まれる設定に基づいてロガーを作成します。
.config
ファイルを使用したロガーのインスタンス化
var logger = LogManager.GetLogger("NewRelicLog");logger.Info("Hello, New Relic!");
サンプルApp.config
ファイル
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <extensions> <add assembly="NewRelic.LogEnrichers.NLog" /> </extensions> <targets> <target name="NewRelicLogFile" xsi:type="File" fileName="C:/path/to/NewRelicLog.json"> <layout xsi:type="newrelic-jsonlayout"> </layout> </target> </targets> <rules> <logger name="NewRelicLog" minlevel="Info" writeTo="newRelicLogFile" /> </rules> </nlog></configuration>
Serilog 2.5以上の拡張機能の設定
当社の Serilog エクステンションを使用すると、ログデータをNew Relicプラットフォームの他の部分の関連データとリンクさせることができます。これには
Serilogは、アプリケーションからのログメッセージを記録し、メッセージデータを格納するためのLogEvent
を作成する構造化されたログフレームワークです。エンリッチャーを使用すると、ログイベントに追加情報を追加できます。シンクとフォーマッタを使用すると、これらのログイベントをフォーマットして出力し、ダウンストリームで使用および表示できます。
次の図は、New Relic Serilog エクステンションの特定のコンポーネントを強調して、Serilog を介したログメッセージの流れを示しています。多くのログフォワーダーが利用できます。この例では、 Fluentd を使用しています。
New Relic Enricher : NewRelicEnricher
は、.NETエージェント(APIを使用)からのコンテキスト情報を、アプリケーションによって生成されたログイベントに追加します。リンクメタデータと呼ばれるこのコンテキスト情報は、ログメッセージをトランザクションとそれらが作成されたスパンにリンクするためにNewRelicによって使用されます。
New Relic Formatter : NewRelicFormatter
は、強化されたログイベントをNewRelicが期待するJSON形式に変換します。シンクは、ログフォワーダーが予期する場所にあるファイルにJSONを出力するようにSerilogに指示します。
New Relicログフォワーダー:ログフォワーダーは、適切にフォーマットされ、強化されたログデータをFileTarget
出力からNewRelicログエンドポイントに送信するように構成されています。
Serilogのログイベントについては、GitHubのSerilogドキュメント( )を参照してください。 。
Serilog拡張機能のコンテキストでログを設定するには
Visual Studio NuGetパッケージマネージャーを使用して、
NewRelic.LogEnrichers.Serilog
パッケージを見つけてインストールします。アプリケーションコードで、ログ設定を更新して
NewRelicEnricher
とNewRelicFormatter
を追加します。次のコード例は、NewRelicリンクメタデータでログイベントを強化します。既存のログファイルに加えて、ログフォワーダーが使用できるように、
C:\logs\SerilogExample.log.json
の特定のJSON形式で新しいログファイルを出力します。var loggerConfig = new LoggerConfiguration();loggerConfig.Enrich.WithThreadName().Enrich.WithThreadId().Enrich.WithNewRelicLogsInContext().WriteTo.File( path: @"C:\logs\ExistingLoggingOutput.txt").WriteTo.File(formatter: new NewRelicFormatter(),path: @"C:\logs\SerilogExample.log.json");var log = loggerConfig.CreateLogger();この設定により、新しいJSONファイルがディスクに書き込まれます。これらの 設定オプション の中には、使用するディスク容量やシンクのパフォーマンスを管理するのに役立つものもあります。
restrictedToMinimumLevel
buffered
rollingInterval
rollOnFileSizeLimit
retainedFileCountLimit
必須ではありませんが、 Serilog Asynchronous Sink Wrapper を使用すると、ログファイルのフォーマットや出力を別のスレッドで行うことができ、パフォーマンスの向上に役立ちます。
Serilog拡張機能を構成し、ログファイルを更新したら、ログを転送するためのいくつかのオプションがあります。コンテキスト内のログにインフラストラクチャエージェントを使用する構成例を次に示します。
logs:- name: application-logfile: C:\logs\log4netExample.log.json # Path to a single log file
また、New Relic Serilog エクステンションをファイルベースの設定プロバイダで設定することもできます。以下の追加 NuGet パッケージが必要です。
Serilog.Settings.Configuration
次のサンプルコードは、
appSettings.json
ファイルに含まれる設定に基づいてロガーを作成します。を使用してロガーをインスタンス化する
appsettings.json
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");var configuration = builder.Build();var logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger();サンプル
appsettings.json
ファイル{"Serilog": {"Using": ["Serilog.Sinks.Console","Serilog.Sinks.File","NewRelic.LogEnrichers.Serilog"],"MinimumLevel": "Debug","Enrich": ["WithNewRelicLogsInContext"],"WriteTo": [{"Name": "File","Args": {"path": "C:\\Logs\\SerilogExample.log.json","formatter": "NewRelic.LogEnrichers.Serilog.NewRelicFormatter, NewRelic.LogEnrichers.Serilog"}}],"Properties": {"Application": "NewRelic Logging Serilog Example"}}}次のサンプルコードは、
web.config
ファイルに含まれる設定に基づいてロガーを作成します。 Serilog.Settings.AppSettingsNuGetパッケージが必要です。.config
ファイルを使用してロガーをインスタンス化するvar logger = new LoggerConfiguration().ReadFrom.AppSettings().CreateLogger();サンプル
web.config
ファイル<?xml version="1.0" encoding="utf-8"?><configuration><appSettings><add key="serilog:using:NewRelic" value="NewRelic.LogEnrichers.Serilog" /><add key="serilog:using:File" value="Serilog.Sinks.File" /><!--Add other enrichers here--><add key="serilog:enrich:WithNewRelicLogsInContext" /><add key="serilog:write-to:File.path" value="C:\logs\SerilogExample.log.json" /><add key="serilog:write-to:File.formatter" value="NewRelic.LogEnrichers.Serilog.NewRelicFormatter, NewRelic.LogEnrichers.Serilog" /></appSettings>