C # Log4Net Rolling File Appender создает несколько файлов - PullRequest
0 голосов
/ 09 июля 2019

Я использую шаблон Singleton для Log4Net в своих Windows и веб-приложениях, и у меня периодически возникает проблема, при которой файл журнала создается несколько раз, а имя файла добавляется в новый файл.Поэтому я получаю файлы журналов, как показано ниже: -

05-07-2019 - Service.log
05-07-2019 - Service.log05-07-2019 - Service.log
05-07-2019 - Service.log05-07-2019 - Service.log05-07-2019 - Service.log

Эта проблема возникает не при переворачивании, а, по-видимому, случайно в течение дня, но не каждый день.

Мой файл конфигурацииследующим образом: -

<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="LogFiles/" />
      <datePattern value="dd-MM-yyyy' -  Service.log'" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10000KB" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date]-[%-5level]-[%logger]-%message%newline" />
      </layout>
    </appender>
    <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
      <localPort value="64667" />
      <remoteAddress value="127.0.0.2" />
      <remotePort value="64666" />
      <layout type="log4net.Layout.PatternLayout, log4net">
        <conversionPattern value="[%-5level]-[%logger]-%message%newline" />
      </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="INFO" />
        <foreColor value="White, HighIntensity" />
        <backColor value="Green" />
      </mapping>
      <mapping>
        <level value="DEBUG" />
        <foreColor value="White, HighIntensity" />
        <backColor value="Blue" />
      </mapping>
      <mapping>
        <level value="WARN" />
        <foreColor value="Yellow, HighIntensity" />
        <backColor value="Purple" />
      </mapping>
      <mapping>
        <level value="ERROR" />
        <foreColor value="Yellow, HighIntensity" />
        <backColor value="Red" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ColoredConsoleAppender" />
      <appender-ref ref="RollingFileAppender" />
      <appender-ref ref="UdpAppender" />
    </root>
  </log4net>

Соответствующие части класса ведения журнала следующие: -

public class LogBase
    {

        /// <summary>
        /// Logger.
        /// </summary>
        public static ILog  m_logger;

        /// <summary>
        /// New Line.
        /// </summary>
        public static readonly string NewLine = Environment.NewLine;

        /// <summary>
        /// Current Directory
        /// </summary>
        public static string CurrentDirectory;

        /// <summary>
        /// Base Instance
        /// </summary>
        static LogBase()
        {
            try
            {
                try {

                    Console.WriteLine("Starting logging initialisation.");

                    log4net.Config.XmlConfigurator.Configure();

                } catch {

                    Console.WriteLine("Unable to load logging configuration check that the app.config file exists and is well formed.");

                    ConfigureConsoleLogger();

                } finally { 

                    try {

                        if ( Assembly.GetEntryAssembly() == null )

                            m_logger = LogManager.GetLogger("WEB");

                        else

                            m_logger = LogManager.GetLogger(Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location));

                    } catch ( Exception excp ) { 


                    }

                }

                CurrentDirectory = Regex.Replace(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase), @"^file:\\", ""); // There's undoubtedly a better way!

            } catch ( Exception excp ) { 


            }

        }

        /// <summary>
        /// Get a logger. 
        /// </summary>
        /// <param name="logName"></param>
        /// <returns></returns>
        public static ILog GetLogger(string logName)
        {

            if ( logName == string.Empty )

                return GetLogger();

            else

                return LogManager.GetLogger(logName);
        }

        /// <summary>
        /// Get a logger. 
        /// </summary>
        /// <param name="logName"></param>
        /// <returns></returns>
        public static ILog GetLogger() {

            return m_logger;

        }

        /// <summary>
        /// Configures the logging object to use a console logger. This would normally be used
        /// as a fallback when either the application does not have any logging configuration
        /// or there is an error in it.
        /// </summary>
        public static void ConfigureConsoleLogger() {
            log4net.Appender.ConsoleAppender appender = new log4net.Appender.ConsoleAppender();

            log4net.Layout.ILayout fallbackLayout = new log4net.Layout.PatternLayout("%m%n");
            appender.Layout = fallbackLayout;

            log4net.Config.BasicConfigurator.Configure(appender);
        }





        /// <summary>


        /// <summary>
        /// Constructor.
        /// </summary>
        public LogBase () {
        }

    }

Мне не удалось найти причину, по которой файлы журнала воссоздаются случайным образомкак новые файлы с соответствующими именами.

Любая помощь будет оценена.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...