登録
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 を使用することができません。