Castle Windsor Log4Net问题

3
我在ASP.Net MVC中使用windsor castle log4net facility集成时遇到了问题。我有两个项目,代码相同(我写的示例和当前项目)。示例项目可以正常工作,但我的当前项目无法工作,我得到一个空引用异常。我有一个asp.net mvc 3应用程序,其中包含castle windsor IOC的集成。通过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")); 
}

步骤2:

log4net.config

步骤3:在我的AccountController(LogOn方法)中。。。
public ILogger Logger { get; set; }
Logger.InfoFormat("User {0} has successfully signed in.", model.UserName);

在过去的一周中,我尝试了所有方法并阅读了这个网站上的20-30篇文章,但我仍然无法使其工作。也许如果有人告诉我问题所在并指导我进行逐步教程,我将非常感激。
我不确定自己错过了什么。我已经检查了项目->属性->应用程序->.Net Framework 4.0,但仍然不起作用。
注意:我遵循了Castle Windsor网站教程 http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Five-Adding-logging-support.ashx

如果将记录器作为构造函数依赖项(或保持其作为属性依赖项,但使其成为必需的依赖项),会发生什么? - kko
我遇到了类似的问题。Castle的支持似乎非常不可靠。我有一堆使用记录器的类。这些类都是从模板生成的,因此它们使用记录器的方式在所有情况下都是相同的,但对于某些类,它可以工作,而对于其他类,则无法工作,并且会在应用程序运行时更改。真的很烦人。 - Pete
3个回答

0

从你的问题中并不清楚你是否正在从Windsor容器实例化控制器。也许这是一些显而易见且不值得提及的事情,但也有可能你只是忘记了它,所以最好排除这种可能性。


0

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

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

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


0

使用Castle.Core.Logging.ILogger而不是来自log4net的那个。这是LoggingFacility使用的。


有人能帮我解决这个问题吗? - avyas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接