2

log4net を使用して詳細なデバッグ ログを有効にするオプションが必要です。従来の ASP.Net でスレッドがどのように処理されるかはよく知っていましたが、スレッドが ServiceStack でどのように機能するのか疑問に思いました。目標は、%Thread を使用して要求をログにグループ化することです。唯一の問題は、スレッド プールが存在する可能性が高く、%thread id が後続の要求で再利用されることだと思います。

本当に私が探しているのは、log4net に公開できる単一の一意の ID であり、レポートを作成するときに単一の要求のログ全体をグループ化できます。

誰か指導を貸してもらえますか?

4

1 に答える 1

1

ServiceStack での同時実行に関するこのページを参照してください。つまり、ASP.NET でホストされている場合、ServiceStack は新しいスレッド自体を作成しません。要求は、要求を処理する同じ IIS/Nginx/etc ASP.NET HTTP WebWorker で処理されるだけです。スレッド プールとスレッド インスタンスの最終的な制御は、基礎となる ASP.NET 次第ですが、同じスレッドを再利用して異なる要求を処理するのが一般的です。

単一のリクエストの有効期間を通じてデータを共有しIHttpRequest.Itemsたい場合はいつでも使用できます。たとえば、次のように PreRequestFilters を使用して、リクエストの開始時にGuid を割り当てることができます。

this.PreRequestFilters.Add((req, res) => req.Items["ReqId"] => Guid.NewGuid());

これは、リクエストの存続期間全体にわたって持続し、IHttpRequestすべてのフィルター、サービス、ビューなどで同じインスタンスを使用できます。

于 2013-04-12T19:37:06.583 に答える