2

私のはAsp.net MVC 4アプリケーションです。以下を実装する必要があります。web.config ファイルで設定されたログ レベル (例: 1/2/3/4)

私はログに記録する必要があります:

1 :

  • メソッド開始
  • メソッド終了
  • アプリケーションの警告

アプリケーション例外

2:

  • アプリケーションの警告
  • アプリケーションの例外

3:

  • アプリケーションの例外

4:

  • なし

さらに、グローバルフィルターを使用してこれを達成する必要があります。

親切に私にいくつかの指針を提供してください。

前もって感謝します。


解決済み

以下は私の手順です

次の Filter クラスを作成しました

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class LoggerFilterAttribute : ActionFilterAttribute
    {
        private ILog _objLog4Net = null;
        string logLevel = string.Empty;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString());
            logLevel = GetLogLevel();
            if (logLevel == "1")
            {
                _objLog4Net.Debug(string.Concat("Entered ", filterContext.Controller.GetType().ToString(), "'s ", filterContext.ActionDescriptor.ActionName, " method"));
            }
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString());
            logLevel = GetLogLevel();
            if (logLevel == "1")
            {
                _objLog4Net.Debug(string.Concat("Existing ", filterContext.Controller.GetType().ToString(), "'s ", filterContext.ActionDescriptor.ActionName, " method"));
            }
        }

        private string GetLogLevel()
        {
            return ConfigurationManager.AppSettings["LOGLEVEL"].ToLower().ToString();
        }

    }

1 OnActionExecuting() および OnActionExecuted() を介して Method Start および Method End のログが記録されます。

さらに以下は、例外をログに記録するための ExceptionFilter クラスです。

public class ExceptionFilterAttribute : HandleErrorAttribute
{
    private ILog _objLog4Net = null;
    string logLevel = string.Empty;
    public override void OnException(ExceptionContext filterContext)
    {

        _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString());

        logLevel = GetLogLevel();
        if (logLevel == "1" || logLevel == "2")
        {
            _objLog4Net.Error(filterContext.Exception.Message, filterContext.Exception);
        }

        if (logLevel == "3")
        {
            if (filterContext.Exception.GetType().IsSubclassOf(typeof(ApplicationException)))
            {
                _objLog4Net.Error(filterContext.Exception.Message, filterContext.Exception);
            }
        }
    }

    private string GetLogLevel()
    {
        return ConfigurationManager.AppSettings["LOGLEVEL1"].ToLower().ToString();
    }

}

このクラスは、ログ レベルごとに、すべての例外をログに記録するか、アプリケーションの例外のみをログに記録します。

Loglevel が none の場合、どの条件も真になりません / 何もログに記録されません。

4

1 に答える 1

1

これらのタイプの質問は反対票を投じられ、すぐに表示されます...ここで疑問に思っている場合は、独自の可能性がある要件を共有しましたが、費やした分析作業を共有しませんでした. そのため、あなたが尋ねた質問は一般的なカテゴリに分類されます。このサイトの新しいメンバーであることを認識しています。これを取得するには時間がかかります。だから私の側からの少しの助けは、

  1. 以下の Web サイトにアクセスしてください (Google で検索すると、さらに多くの Web サイトが表示されます)。
  2. log4net が提供するものとその仕組みを理解します。
  3. 要件に合っているかどうかを判断します (そのオプションが開いている場合)。
  4. log4net のような新しいものを (初めて試す人のために) 試すサンプル プロジェクトである概念実証 (POC) を行います。
  5. ライブラリを理解して使い始めたら、直面している特定の質問や問題を投稿してください (喜んでお手伝いします)。

いくつかのリンクは次のとおりです。

http://www.codeproject.com/Articles/140911/log4net-Tutorial http://www.eyecatch.no/blog/2012/08/logging-with-log4net-in-c-sharp/

以下の SO の回答も確認してください: https://stackoverflow.com/questions/4670916/does-anyone-know-any-tutorial-preferably-book-on-log4net

于 2013-08-27T06:39:48.033 に答える