В Log4Net создаются все указанные папки журналов, но ведение журнала не работает для File Appender - PullRequest
0 голосов
/ 19 мая 2018

Я использую Castle с Log4Net.Все папки были созданы, но информация о журналировании не записывается в текстовый файл.

здесь - конфигурация;

<add key="log4net.Internal.Debug" value="true"/>
<add key="log4net.Internal.Error" value="true"/>
<add key="log4net.Internal.Info" value="true"/>
<add key="log4net.Internal.Fatal" value="true"/>
<add key="log4net.Internal.Warn" value="true"/>


<appender name="debugAppender" type="log4net.Appender.RollingFileAppender,log4net">
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="DEBUG" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
  <file value="..\\..\\LOGS\\DEBUG\\" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <DatePattern value="yyyy\\\\MM\\\\dd\\\\yyyyMMdd'_debug.txt'" />
  <maxSizeRollBackups value="-1" />
  <maximumFileSize value="50MB" />
  <countDirection value="1" />
  <preserveLogFileNameExtension value="true" />
  <encoding value="utf-8" />
  <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
</appender>`

<logger name="Log">
  <appender-ref ref="errorAppender" />
  <appender-ref ref="infoAppender" />
  <appender-ref ref="debugAppender" />
  <appender-ref ref="warningAppender" />
  <appender-ref ref="fatalAppender" />
</logger>`

Я использую консольное приложение для этого, и метод Main запустится следующим образом:

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

И каждый имеет право на запись, чтение всех файлов в папках LOGS.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 20 мая 2018

Я использовал вашу ту же конфигурацию, конечно, с небольшими изменениями, которые вы можете попробовать

Я создал консольное приложение как ваше:

Вот моя точка входа:

public class Program
    {
        private static readonly log4net.ILog log
      = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        static void Main(string[] args)
        {
            XmlConfigurator.Configure(new FileInfo("..\\..\\log4net.config"));
            log.Debug("Hi this is DEBUG from logging");
            log.Info("This is information from logger");
            log.Error("This is Error from logger");
            Console.ReadLine();

        }
    }

А вот конфигурация, которую я использовал:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  <section name="log4net"

     type="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net"/>
    </configSections>
  <log4net>
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} 
    [%thread] %level %logger - %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>
    <appender name="debugAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <file value="..\\..\\LOGS\\DEBUG\\" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <DatePattern value="yyyy\\\\MM\\\\dd\\\\yyyyMMdd'_debug.txt'" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="50MB" />
      <countDirection value="1" />
      <preserveLogFileNameExtension value="true" />
      <encoding value="utf-8" />
      <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
      <layout type="log4net.Layout.PatternLayout,log4net">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
      <root>
      <level value="DEBUG" />
      <appender-ref ref="ConsoleAppender" />
      <!--<appender-ref ref="DebugOutputAppender" />-->
      <appender-ref ref="debugAppender" />
    </root>
   </log4net>
</configuration>

Вы можете заметить, что у меня добавлено Консоль appender для проверки регистрацииработает должным образом на консоли перед проверкой файла журнала.

Примечание : При той же конфигурации, что и у вас, я не смог записать любую информацию в Консоль, а также в файл, хотя папка и файл создавались без проблем.

Я сделал следующее изменение: добавил элемент уровня root , вставленный в приведенный выше фрагмент конфигурации.У вас должен быть один корневой раздел для размещения ссылок вашего регистратора верхнего уровня.Это регистраторы, которые наследуют информацию от вашего базового регистратора (root).

У меня удалено дополнительных регистраторов, которые вы использовали.

Иногда вам захочется узнать больше об определенной части вашего приложения.log4net ожидал этого, позволяя вам указывать дополнительные ссылки на регистратор помимо корневого регистратора.Например, вот дополнительный регистратор для регистрации сообщений консоли, которые появляются внутри объекта класса OtherClass :

<logger name="Log4NetTest.OtherClass">
  <level value="DEBUG"/>
  <appender-ref ref="ConsoleAppender"/>
</logger>

Используйте его, если вы действительно уверены в этом.

Хорошее руководство для начала работы с log4net: здесь .

Дайте мне знать, если у вас возникнут какие-либо проблемы.

...