为什么 log4net 配置文件未被读取

Man*_*tel 5 c# log4net

log4net.xml我的解决方案的根目录中有一个文件。用于复制到 bin 的文件属性设置为Always copy。我已确认该文件已复制到 bin 目录。

在配置中,我设置了一个文件附加器(基本上是文档中的复制粘贴):

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
 <file value="Logs\\log.log" />
 <appendToFile value="true" />
 <rollingStyle value="Date"/>
 <datePattern value="yyyyMMdd-HHmmss" />
 <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
 </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

我也有这条线AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

记录器在代码文件中的设置如下:

private static ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

我也将log4net.Config.XmlConfigurator.Configure();(也带有FileInfo参数)添加到了 main 中Program.cs

但是,如果我执行该程序,则不会创建预期的日志文件。我怀疑 log4net 甚至没有读取配置文件。

我错过了什么吗?从 VS 内部执行也不起作用(尽管它以某种方式拾取了 Console Appender 部分)。

类似的帖子:

提前致谢。

编辑

因此,我通过从文档中删除复制/粘贴部分来在 VS 中实现此功能:

 <root>
  <level value="DEBUG" />
  <appender-ref ref="A1" />
 </root>
Run Code Online (Sandbox Code Playgroud)

但是从exe运行还是不行

Man*_*tel 0

我解决了这个问题,我不知道这是否是正确的修复 - 而且我不知道为什么它在 VS 中工作一次 - 但我认为这只是配置文件配置不正确。

首先,由于 中有文件的声明,AssemblyInfo.cs因此不需要log4net.Config.XmlConfigurator.Configure();.

其次,我只需将两个附加程序添加到根标签中:

<root>
 <level value="DEBUG" />
 <appender-ref ref="A1" />
 <appender-ref ref="RollingFile" />
</root>
Run Code Online (Sandbox Code Playgroud)

就是这样。VS在控制台上输出以及文件,exe输出到文件。