Исключение из файла Mutex log4net: исключение неавторизованного доступа

Я недавно обновил свою версию log4net с действительно старой версии (1.2.13) до самой новой версии (2.0.8), но с тех пор компонент службы веб-сайта apache выдает следующее сообщение об ошибке:

2018-01-15 06:19:35,933 DEBUG - Exception-Message: Access to the path 'C__Rafina_LeBu_logs_NFDDL2.log' is denied.
2018-01-15 06:19:35,933 DEBUG - Exception-StackTrace:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.Threading.Mutex.MutexTryCodeHelper.MutexTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.Mutex.CreateMutexWithGuaranteedCleanup(Boolean initiallyOwned, String name, Boolean& createdNew, SECURITY_ATTRIBUTES secAttrs)
   at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew, MutexSecurity mutexSecurity)
   at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name)
   at log4net.Appender.RollingFileAppender.ActivateOptions()
   at NFCIn.Logging.InL4NLogFac.LogImp..ctor(String name)
   at NFCIn.Logging.InL4NLogFac.CrLog(ILoggerRepository repository, String name)
   at log4net.Repository.Hierarchy.Hierarchy.GetLogger(String name, ILoggerFactory factory)
   at log4net.Repository.Hierarchy.Hierarchy.GetLogger(String name)
   at log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name)
   at log4net.LogManager.GetLogger(String name)
   at NFCIn.Log.L4NFac.b(LogName id)
   at NFDDL.DDo.probeDL2(DateTime dateStart, DateTime dateEnd, String headStatus, String transmissionStatus, String supplier, String documenttype, String documentsubtype, Int32 processed, String clientId, String documentUser)
   at NFIISWServ.Serv.pr(String base64request)

Я смущен этим, поскольку суть проблемы, кажется, происходит в вызове log4net, поэтому я не знаю, что я могу с этим поделать.

Что касается последней части вызова, которая происходит в коде моей команды, это выглядит так:

            var rollingAppender = new RollingFileAppender
            {
                File = logFileName,
                AppendToFile = true,
                Encoding = Encoding.UTF8,
                RollingStyle = RollingFileAppender.RollingMode.Size,
                MaxSizeRollBackups = 0,
                MaxFileSize = logSettings.MaxFileSize,
                StaticLogFileName = true,
                LockingModel = new FileAppender.MinimalLock(),
                Layout =
                    new PatternLayout(
                    logSettings.Pattern),
                Threshold = this.NfLogLevelToInternalLogLevel(logSettings.LogLevel)
            };

            rollingAppender.ActivateOptions();

            this.AddAppender(rollingAppender);

С другой стороны, мои исследования показали, что этой проблеме уже три года, и она возникла, как только люди обновили log4net 1.2.13 до более новой версии в 2015 году, поэтому я решил, что должно быть решение или, по крайней мере, Обходной путь для этого к настоящему времени.

Однако, как ни старайся, я не смог найти одну, только нерешенные проблемы, подробно описывающие ту же проблему, что и у меня, заканчивающуюся бесполезными постами типа "Было бы неплохо, если бы вы могли устранить эту проблему на своей стороне. Как только мы сможем воспроизвести" вопрос, мы можем написать тест и исправить это навсегда."

Итак, есть ли исправление или обходной путь для этого к настоящему времени? Любой совет, который вы могли бы дать мне, был бы очень признателен.


ОБНОВИТЬ:

К настоящему времени я попробовал и подтвердил несколько вещей:

1.) В ряде случаев проект успешно использует регистратор log4net, и в коде нет четких различий между путем, который работает, и путем, который не работает. Например, вот сравнение между последней точкой расхождения между рабочим и нерабочим путями:

За работой:

Dim log As ILogger = loggingFactory.build(LogName.NFDDL).open("Document.Parse")

Не работает:

Dim log As ILogger = loggingFactory.build(LogName.NFDDL).open("DDo.probeDL2")

(Аргумент в open() - это просто строка, которая записывается в журнал, так что это не может быть проблемой)

2.) Изменяя значение LockingModel в RollingAppender, я могу обострить эту проблему. Полное комментирование приводит к тому, что проблема возникает буквально повсюду, а наш файл журнала остается размером 0 байт. Между тем, установка его в "new FileAppender.InterProcessLock()" приводит к тому, что первоначальная ошибка также возникает в разных частях сайта, но, по крайней мере, некоторая базовая информация по-прежнему записывается в файл журнала.

Я не думаю, что есть способ снизить уровень журнала ниже MinimalLock(), есть?


ОБНОВЛЕНИЕ 2:

К настоящему времени мне удалось нарастить ошибку. Это не происходит на всех страницах портала, даже с ранее работавшими вызовами функций, хотя после всех моих экспериментов с этой проблемой я откатил все свои изменения до версии, которая была у меня сегодня утром, с помощью git, где все еще затронутые страницы были еще за работой. Я предполагаю, что где-то во время моих экспериментов log4net блокировал мьютекс некоторых файлов и никогда не снимал эту блокировку. Может кто-нибудь помочь мне с этим?

0 ответов

Другие вопросы по тегам