Я создал приложение с двумя проектами - одним проектом Windows Forms и одной библиотекой классов, содержащей мои пользовательские элементы управления. Я добавил log4net в библиотеку классов с этой конфигурацией в файле log4net.config:
<?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>
В файле для параметра «Действие построения» задано значение «Содержимое» и «Копировать в выходной каталог», установленное как «Копировать всегда». В 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 Forms, регистрация больше не происходит. Когда я присоединяюсь к приложению из Visual Studio, я вижу, что журнал не настроен должным образом - нет никаких приложений. У меня закончились идеи, что с этим делать. Я попытался вмешаться в конфигурации (оба App.config, log4net.config), попытался добавить эту строку:
XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
Я также попытался добавить этот декоратор, чтобы убедиться, что метод инициализации журнала не оптимизирован:
[MethodImpl(MethodImplOptions.NoInlining)]
Может кто-нибудь посоветовать, пожалуйста, как заставить это работать?