войти 4net в библиотеку классов - PullRequest
1 голос
/ 31 марта 2020

У меня есть проект библиотеки классов, прикрепленный к inte rnet explorer (надстройка для проводника), я хочу зарегистрировать эту библиотеку классов с log4net, я добавил файл App.config в проект:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
  <appSettings>
    <add key="log4net.Config" value="log4net.config"/>
    <add key="log4net.Config.Watch" value="True"/>
  </appSettings>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppenderSize" type="log4net.Appender.RollingFileAppender">
      <file value="FromLog4netLon.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <encoding value="utf-8" />
      <maximumFileSize value="10MB" />
      <maxSizeRollBackups value="5" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception" />
      </layout>
    </appender>
    <root>
      <level value="FATAL" />
      <level value="WARN" />
      <level value="INFO" />
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppenderSize" />
    </root>
  </log4net>
</configuration>

И под AssemblysInfo.cs я добавил [assembly: log4net.Config.XmlConfigurator(Watch = true)]

И внутри своего проекта я добавил

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

И я пытаюсь написать так:

log.Info("test log");

Я также пытаюсь добавить это:

FileInfo fi = new FileInfo(@"D:\IExtonsionsTests\1\bin\Debug\ClassLibrary.dll.config");
log4net.Config.XmlConfigurator.Configure(fi);

Но он не записывает файл журнала, что мне не хватает?

1 Ответ

1 голос
/ 31 марта 2020

Убедитесь, что значение вашего файла правильное и путь действительно существует. Вам не хватает самого важного, регистратора. Просто вставьте этот код после вашего аппендера:

(Вы можете добавить более одного регистратора, если хотите)


<logger name="STANDART" additivity="false">
        <level value="ALL"/>
        <appender-ref ref="RollingFileAppenderSize"/>
    </logger>

Ваш код должен выглядеть следующим образом это:

public enum LoggerTypes
{
    STANDART = 0
}
public class Logger1
{
    private static readonly string _loggerConfigDic = "..\\..\\YOURFOLDER\\YOURFILENAME.xml";
    private static readonly List<string> _names = new List<string> { "STANDART" }; /*Logger names in config file*/

    public static ILog GetLogger(LoggerTypes loggerType)
    {
        var fileInfo = new FileInfo(_loggerConfigDic);
        XmlConfigurator.ConfigureAndWatch(fileInfo);
        return LogManager.GetLogger(_names[(int)loggerType]);
    }
}

public class myClass
{
    public void SomeMethod()
    {
        var logger = Logger1.GetLogger(LoggerTypes.STANDART);
        logger.Debug("your message here");
    }
}
...