Проблема Log4net с RollingFileAppender - PullRequest
1 голос
/ 17 марта 2011

Следующий код:

  <log4net debug="lse">
    <!-- Define some output appenders -->
    <appender name="trace" type="log4net.Appender.TraceAppender, log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n"/>
      </layout>
    </appender>
    <!-- Add StrcuturedFN logger-->
    <appender name="StructuredFNLoggerAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\Log.txt"/>
      <param name="AppendToFile" value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d{yyyy-MM-dd hh:mm:ss:ff} - %m%n"/>
      </layout>
    </appender>

    <!-- Setup the root category, add the appenders and set the default priority -->
    <root>
      <priority value="WARN"/>
      <appender-ref ref="StructuredFNLoggerAppender"/>
    </root>

    <logger name="StructuredFNLogger.Logging">
      <level value="ALL"/>
      <appender-ref ref="StructuredFNLoggerAppender"/>
    </logger>

  </log4net>

Регистратор ведет журнал, но новый файл не создается, когда размер файла увеличивается более чем на 10 МБ.

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Может быть, это может помочь; Вот раздел конфигурации рабочего приложения, использующего RollingFileAppender.

<log4net>
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <param name="File" value="child" />
            <param name="CountDirection" value="1" />
            <param name="MaximumFileSize" value="10MB" />
            <param name="MaxSizeRollBackups" value="-1" />
            <param name="DatePattern" value=".yyyy-MM-dd" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="DateTime    Thread  Level   Logger  Message%newline" />
                <param name="ConversionPattern" value="%d   %t  %-5p    %c  %m%n" />
            </layout>
        </appender>
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <param name="File" value="delivery.log" />
            <param name="AppendToFile" value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="DateTime    Thread  Level   Logger  Message%newline" />
                <param name="ConversionPattern" value="%d   %t  %-5p    %c  %m%n" />
            </layout>
        </appender>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
            </layout>
        </appender>
        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
            <param name="Threshold" value="ERROR" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="[%thread] %-5level %logger%newline%message" />
            </layout>
        </appender>     
        <!--
        <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender" >
            <param name="Threshold" value="FATAL" />
            <param name="SmtpHost" value="-fill in-" />
            <param name="Subject" value="FUSION RIS Delivery Service " />
            <param name="To" value="-fill in-" />
            <param name="From" value="-fill in-" />
            <param name="Lossy" value="false" />
            <param name="BufferSize" value="1" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%newline%d [%thread] %-5level %logger%newline%message" />
            </layout>
        </appender>     
        -->
        <root>
            <level value="WARN" />
            <appender-ref ref="ConsoleAppender" />
            <appender-ref ref="RollingFileAppender" />
            <appender-ref ref="EventLogAppender" />
            <!--<appender-ref ref="LogFileAppender" />-->
            <!--<appender-ref ref="SmtpAppender" />-->
        </root>
    </log4net>
2 голосов
/ 17 марта 2011

Включите внутреннюю отладку и посмотрите, происходит ли что-то, что не должно.

из log4net FAQ :

Есть 2 разных способа включения внутренняя отладка в log4net. Эти перечислены ниже.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Предпочтительный метод это указать опция log4net.Internal.Debug в файл конфигурации приложения.

Внутренняя отладка также может быть включена установив значение в файл конфигурации приложения (не файл конфигурации log4net, если данные конфигурации log4net встроены в файл конфигурации приложения). Приложение log4net.Internal.Debug установка должна быть установлена ​​в значение true. Например: Этот параметр сразу читается стартап вызовет все внутренние отладочные сообщения для отправки.

Чтобы включить внутреннюю отладку log4net программно вам нужно установить log4net.Util.LogLog.InternalDebugging свойство к истине. Очевидно, чем раньше это установлено, тем больше будет отладка производится. Внутренние отладочные сообщения записаны на консоль и на System.Diagnostics.Trace системы. Если приложение не имеет консоль сообщения, зарегистрированные там будут Потерянный. Обратите внимание, что приложение может перенаправить поток консоли, установив System.Console.Out. След система по умолчанию отправит сообщение для присоединенного отладчика (где сообщения появятся на выходе окно). Если процесс не имеет отладчик приложил тогда сообщения отправляются в системный отладчик. утилита, как DebugView от http://www.sysinternals.com может быть используется для захвата этих сообщений.

Поскольку внутренние отладочные сообщения log4net написано Система.Диагностика.Трасовая система это можно перенаправить эти сообщения на локальный файл. Вы можете определить след слушатель, добавив следующее к Файл .config вашего приложения:

<configuration>
    ...

    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener"

                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>

    ... </configuration> 

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

0 голосов
/ 17 марта 2011

Вот рабочий пример приложения с подвижным файлом:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="../Logs/Web-Log.xml"/>
        <appendToFile value="true"/>
        <rollingStyle value="Size"/>
        <maxSizeRollBackups value="10"/>
        <maximumFileSize value="10MB"/>
        <layout type="log4net.Layout.XmlLayout">
            <param name="Prefix" value=""/>
        </layout>
    </appender>

    <root>
        <level value="ALL"/>
        <appender-ref ref="FileAppender"/>
    </root>
</log4net>
...