0

登録

container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.NLog)
                                                         .WithConfig("NLog.config"));

このコードは、このドキュメンテーション ページに従っています。

これは、NLog が使用されるコードです。つまり、Castle Windsor は NLog を _logger 実装として提供します。

public class EmailController : Controller
{

    private ILogger _logger = NullLogger.Instance;

    ...

    public ILogger Logger
    {
        get { return _logger; }
        set { _logger = value; }
    }

    public ActionResult Send(UserMessageModel userMessage, bool captchaValid, string captchaErrorMessage)
    {


        if (ModelState.IsValid)
        {
            try
            {
                // Do something
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("Error msg:{0}\rError stacktrace:{1}", ex.Message, ex.StackTrace));
                ...
            }
        }
        ...
    }
}

ただし、コードを次のように変更すると:

[CustomHandleError]
public class EmailController : Controller
{
    [CustomHandleError]
    public ActionResult Send(UserMessageModel userMessage, bool captchaValid, string captchaErrorMessage)
    {


        if (ModelState.IsValid)
        {
            // Do something
        }
        ...
    }
    ...
}
public class CustomHandleError: HandleErrorAttribute
{
    private ILogger _logger = NullLogger.Instance;

    public ILogger Logger
    {
        get { return _logger; }
        set { _logger = value; }
    }

    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)
        {
            base.OnException(null);
        }

        _logger.Error(string.Format("Error msg:{0}\rError stacktrace:{1}", filterContext.Exception.Message, filterContext.Exception.StackTrace));

        if (filterContext.HttpContext.IsCustomErrorEnabled)
        {
            filterContext.ExceptionHandled = true;
            base.OnException(filterContext);
        }
    }
}

この場合、_logger は「NullLogger.Instance」です。「Logger」プロパティを持っているという事実は、Castle Windsor が前のコードと同様に _logger を NLog に変更することを意味すると考えました。

私は何を誤解している可能性がありますか?

編集

ここにコードを追加しました。誰かがそれを見ることができれば、それは素晴らしいことです。

参考: 4 つのコミットがあります。最初のコミットは最初のコミットでした 2 番目のコミットは、必要に応じて NLog を機能させることができることを示していました 3 番目のコミットは、データ属性を機能させることができることを示していました。つまり、Castle Windsor でフィルターを正常に登録しました 最後のコミットが問題です上で説明したように、集中ログで NLog を使用することができません。

4

1 に答える 1