log4net仅在调用XmlConfigurator.Configure()时有效

我知道这个 问题 已 被多次 询问 ,但不幸的是,我无法使我的日志配置工作。 我必须在某个地方犯一些非常小的错误。

我有一个.NET 4.5 MVC 4 / EF 5 Web应用程序,我正在尝试登录工作。 该解决方案有两个项目,一个用于DAO和模型对象,另一个用于网站。 App.Config文件如下所示:

    

同样的log4net部分也已复制到Web.Config文件中。

我在AssemblyInfo.cs文件中添加了以下内容:

 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)] 

对于两个Log.Config文件,“复制到输出目录”设置为true。

我似乎可以将日志记录附加到输出文件的唯一方法是在第一个日志记录语句运行之前调用XmlConfigurator.Configure()。 当我第一次获得记录器时,我想我可以写一个外观来做到这一点,但这感觉不对。

如何在不调用XmlConfigurator的情况下初始化记录器?

我遇到了完全相同的问题。 正如您正确指出的那样,当您在AssemblyInfo.cs包含该行时,您不需要显式调用XmlConfigurator 。 第一次使用log4net时,问题出现在没有该行的集合中。 在我的情况下,我使用的是Topshelf.Log4Net NuGet包,我的应用程序记录的第一个日志行是通过它。

您可以在应用程序的早期记录一行,或者如果您不需要记录任何内容,请执行我所做的操作并在应用程序的入口点添加以下内容

 LogManager.GetLogger(typeof(Program)); 

如果使用以下方法,则无需手动调用XmlConfigurator:

 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)] 

但是,您必须将标记添加到所有dll (所有assambly.cs文件)。