在WebForms应用程序中使用log4net和Ninject日志记录扩展

时间:2012-03-19 14:36:39

标签: asp.net logging ninject-extensions

经过一番努力,我设法得到一个有效的ASP.NET webforms应用程序,它使用Ninject日志记录扩展和log4net作为日志记录框架。 (归功于this blog的基础知识)。 但我对如何继续提出了一些问题。

首先,我需要公开ILogger属性,因为如果它是私有的或受保护的,它仍然是null。 所以现在我有了这个:

[Inject]
protected ILogger _logger { get; set; }

而不是:

private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

我可以忍受它,但它似乎很奇怪。

另一件事是log4net用来填充当前上下文的ThreadContext。我仍然可以像这样使用它

using (ThreadContext.Stacks["NDC"].Push(MethodBase.GetCurrentMethod().Name))
{
     _logger.Info("test");
}

但是offcourse带走了我刚刚添加的所有抽象...... 所以我正在寻找其他人可能会遇到的一些经验/最佳实践。

补充问题:我已经将log4net升级到1.2.11.0,这是NuGet中的当前版本,现在Ninject.Logging.log4net被破坏了,因为它期望版本1.2.10.0 ...有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

补充问题:我已经将log4net升级到了1.2.11.0   NuGet中的当前版本,现在Ninject.Logging.log4net已损坏   因为它期望版本1.2.10.0 ...有没有办法解决这个问题?

您是否尝试使用Packages.config文件中的[xx]修复允许的版本?

  <package id="log4net" version="1.2.10"  allowedVersions="[1.2.10]" /> />

它会阻止下次更新升级到1.2.11或更高版本。

http://docs.nuget.org/docs/reference/versioning