发布后log4net没有记录为ClickOnce winforms application

时间:2018-05-10 18:50:36

标签: c# log4net clickonce

我已经构建了一个包含两个项目的应用程序 - 一个Windows窗体项目和一个包含我的自定义控件的类库。我在log4net.config文件中使用此配置将log4net添加到类库中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <log4net>
    <root>
      <level value="INFO" />
      <appender-ref ref="FileAppender" />
    </root>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="${TMP}\log-file.txt" />
      <appendToFile value="true" />
      <encoding value="unicodeFFFE" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

该文件的Build Action设置为Content,Copy to output目录设置为Copy always。在AssemblyInfo.cs中:

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

我使用控件中的记录器,如下所示:

using System;
using System.Windows.Forms;
using log4net;

namespace ControlProject
{
    public partial class MyControl : UserControl
    {
        private readonly ILog log;

        public MyControl()
        {
            InitializeComponent();

            log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }

        private void logButton_Click(object sender, EventArgs e)
        {
            log.Info("Log something");
        }
    }
}

现在这一切都很好并且在使用Visual Studio时工作正常(此配置在调试和发布模式下都有效)。但是,一旦我发布了Windows窗体项目,就不再发生日志记录了。当我从Visual Studio附加到应用程序时,我可以看到日志配置不正确 - 没有appender。我没有想法如何处理这件事。我尝试使用configs(App.config,log4net.config)进行干预,尝试添加此行:

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

我还尝试添加此装饰器以确保日志初始化方法未被优化:

[MethodImpl(MethodImplOptions.NoInlining)]

有人可以建议如何让这个工作吗?

0 个答案:

没有答案