【问题标题】:Castle Windsor Log4Net Issues温莎城堡 Log4Net 问题
【发布时间】:2012-07-06 12:08:45
【问题描述】:

我在 ASP.Net MVC 中集成温莎城堡 log4net 设施时遇到问题。我有两个具有相同代码的项目(我为保留参考和当前项目而编写的示例)。示例项目工作正常,但我当前的项目不工作我得到一个空引用异常。我有一个集成了城堡温莎 IOC 的 asp.net mvc 3 应用程序。通过 NuGet 添加了必要的 dll。这是我的代码片段: 第 1 步:记录器安装程序

public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{            
     container.AddFacility<LoggingFacility>(f => f.UseLog4Net());            
     //container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.Log4net).WithConfig("log4net.config")); 
}

第二步:

log4net.config

第 3 步:在我的 AccountController(登录方法)中..

public ILogger Logger { get; set; }
Logger.InfoFormat("User {0} has successfully signed in.", model.UserName);

在过去的一周里,我尝试了所有方法并阅读了该网站上的 20-30 篇帖子,但我仍然无法正常工作。如果有人能告诉我问题出在哪里,并为我提供分步教程,我将不胜感激。

我不确定我错过了什么。我已经检查了 Project->Properties->Application->.Net Framework 4.0 但仍然无法正常工作。

注意:我按照城堡温莎网站教程http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Five-Adding-logging-support.ashx

【问题讨论】:

  • 如果您将记录器设为构造函数依赖项(或将其保留为属性依赖项但使其成为必需项?)会发生什么?
  • 我遇到了类似的问题。 Castle 的支持似乎非常不可靠。我有一堆使用记录器的类。这些类都是从模板生成的,因此它们使用记录器的方式在所有情况下都是相同的,但是对于某些类它可以工作,而另一些则不能,并且它会随着我的应用程序的运行而变化。真烦人。

标签: asp.net-mvc-3 log4net castle-windsor


【解决方案1】:

使用Castle.Core.Logging.ILogger 而不是来自 log4net 的那个。这就是 LoggingFacility 的工作方式。

【讨论】:

  • 有人可以帮我解决这个问题吗?
【解决方案2】:

我认为使用 ILogger 的类必须在您尝试使用 ILogger 之前完成实例化。

因此,如果您尝试在构造函数调用完成之前调用 ILogger,由于 Windsor 加载 log4net 的方式,您的 ILogger 将为空。

您是在 AccountController 的构造函数中调用 LogOn() 方法吗?

【讨论】:

    【解决方案3】:

    如果您从 Windsor 容器中实例化控制器,您的问题并不清楚。也许这是显而易见的,不值得一提,但也许你只是忘记了,所以最好排除它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多