0
Azureで低オーバーヘッド分散ログを実現するためのより良い方法は何ですか?Azureの低負荷分散ログを実現するためのより良いオプションは何ですか?
Azureで低オーバーヘッド分散ログを実現するためのより良い方法は何ですか?Azureの低負荷分散ログを実現するためのより良いオプションは何ですか?
複数のAzure Webロールのロギングライブラリとしてlog4netを使用しています。 log4net ADO.Netアペンダは、すべてのエラーをSQL Azureデータベースに記録するために使用されます。クライアント/ユーザーがログをフィルタするために、我々はいくつかのlog4net.GlobalContextのプロパティを使用し、そのよう:
log4net.GlobalContext.Properties["Domain"] = new Log4netDomainProvider();
log4net.GlobalContext.Properties["Username"] = new Log4netUsernameProvider();
各「プロバイダ」は、toString()メソッドをオーバーライドするだけの単純なクラスです。 log4netによってToString()が呼び出されると、現在のセッションから値を取得します(この手法については、SO answerで説明しています)。
public class Log4netDomainProvider
{
public override string ToString()
{
string retval = null;
if (HttpContext.Current == null)
retval = "HttpContext is null";
else if (HttpContext.Current.Session == null)
retval = "HttpContext.Current.Session is null";
else
retval = HttpContext.Current.Session["Domain"];
return retval;
}
}
これはあなたの質問にお応えしたいと思います。もしそうなら、あなたはlog4netロギングコンテキストでこの良いwrite-upをチェックしたいかもしれません。
ありがとうございました。私はこれを調べます。 RoleManager.WriteToLogも試しましたか?もしそうなら、あなたの経験は何でしたか? – iCode
私たちはそれを見ましたが、ブロブストレージ内のログのヒープを手作業で選別したくはありませんでした。私たちの要件の1つは、クライアント/ユーザーの組み合わせで簡単にフィルタリングすることでした。私の答えでは言及していませんでしたが、リモートIPアドレスとマシン名を取得するためにlog4net.GlobalContextプロパティも使用します。フィルタリングオプションをさらに詳細にしたい場合は、Azureサービス管理APIを使用して、ロールが起動するときに静的変数にインスタンス番号、デプロイメント名などを格納することができます。これらの変数についてもlog4net "Providers"を作成することができます。 –