Details
Description
Abstract:
In some configuration cases, the rolling file appender may issue a mutex lock on the folder name. If more than one processes try to do that with different executing identity, only one will be able to log to its specific logs file. The others will no more be able to do it.
Repro:
Many applications run on the same server.
All run under different windows identity.
All do log through RollingFileAppender to D:\Logs\ (value of file configuration node) to their own file log (filename specific to each application through datePattern configuration node, like yyyy.MM.dd'-App1.log', yyyy.MM.dd'-App2.log', ...).
They log through AdoNetAppender too.
Since having upgraded Log4Net from 1.2.13 to 1.2.15 on some applications, they cease being able to all log to D:\Logs\. Only one of them still do log, depending on which have started first. SQL logs still work. Non upgraded applications are still able to log to D:\Logs\, whatever their start order have been.
Diagnosis info:
Activating log4net debug trace on an application, and comparing failure cases to working cases, yields following diff:
log4net:ERROR Could not create Appender [RollingLogFileAppender] of type [log4net.Appender.RollingFileAppender]. Reported error follows. System.UnauthorizedAccessException: Access to path 'D__Logs_' denied. (Translated from french) à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) à System.Threading.Mutex.MutexTryCodeHelper.MutexTryCode(Object userData) à System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) à System.Threading.Mutex.CreateMutexWithGuaranteedCleanup(Boolean initiallyOwned, String name, Boolean& createdNew, SECURITY_ATTRIBUTES secAttrs) à System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew, MutexSecurity mutexSecurity) à System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew) à log4net.Appender.RollingFileAppender.ActivateOptions() à log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement) log4net:ERROR Appender named [RollingLogFileAppender] not found.
log4net: Searched for existing files in [D:\Logs] log4net: curSizeRollBackups starts at [0] log4net: Opening file for writing [D:\Logs\2016.02.26-App1.log] append [True] log4net: Created Appender [RollingLogFileAppender] log4net: Adding appender named [RollingLogFileAppender] to logger [root].
(All other trace lines are identical)
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="D:\Logs\" /> <datePattern value="yyyy.MM.dd'-App1.log'" /> <staticLogFileName value="false" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="5MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message - %property%newline%exception" /> </layout> </appender>
Attachments
Attachments
Issue Links
- is broken by
-
LOG4NET-485 RollingFileAppender cannot be used by multiple process
- Resolved
- relates to
-
LOG4NET-587 Mutex ~ Access to the path is denied in log4net.Appender.RollingFileAppender.ActivateOptions()
- Closed
- requires
-
LOG4NET-487 Control mutex type
- Open