[ https://issues.apache.org/jira/browse/LOG4NET-443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Calin Pavel updated LOG4NET-443: -------------------------------- Attachment: log4net.xml For configuring log4net I'm using an XML (attached) and some dynamic configuration: private void addLogger(Hierarchy loggerRepository, MonitorConfig monitorConfig) { Logger root = loggerRepository.Root; RollingFileAppender mainAppender = (RollingFileAppender)root.GetAppender(MAIN_FILE_APPENDER_NAME); string logPath = mainAppender.File; string logDir = logPath.Substring(0, logPath.LastIndexOf(@"\")); // create the appender RollingFileAppender monitorAppender = new RollingFileAppender(); monitorAppender.Name = buildAppendererName(monitorConfig); monitorAppender.File = Path.Combine(logDir, MONITOR_LOGGING_PARENT_DIR, monitorConfig.name) + @"\"; // Copy values from the DataCollector appenderer (main appenderer) monitorAppender.DatePattern = DateHelper.DATE_FORMAT + "'_" + monitorConfig.name + ".log'"; monitorAppender.AppendToFile = mainAppender.AppendToFile; monitorAppender.RollingStyle = mainAppender.RollingStyle; monitorAppender.StaticLogFileName = mainAppender.StaticLogFileName; monitorAppender.PreserveLogFileNameExtension = mainAppender.PreserveLogFileNameExtension; PatternLayout layout = new PatternLayout("%date [%thread] %-5level %logger{1}:%L - %message%newline"); monitorAppender.Layout = layout; monitorAppender.Threshold = monitorConfig.loggingLevel; PropertyFilter filter = new PropertyFilter(); filter.Key = LoggingConstants.THREAD_LOGGING_KEY; filter.StringToMatch = monitorConfig.name; DenyAllFilter filterDeny = new log4net.Filter.DenyAllFilter(); monitorAppender.AddFilter(filter); monitorAppender.AddFilter(filterDeny); monitorAppender.ActivateOptions(); // create the logger Logger rootLogger = (Logger)LogManager.GetLogger(ROOT_LEVEL).Logger; // Force DEBUG level for logger. Filter by level will be done by appenderer rootLogger.Level = Level.Debug; rootLogger.AddAppender(monitorAppender); } > Logger.CallAppenders > -------------------- > > Key: LOG4NET-443 > URL: https://issues.apache.org/jira/browse/LOG4NET-443 > Project: Log4net > Issue Type: Bug > Affects Versions: 1.2.13 > Environment: Windows service implemented with .NET 4.5 using Log4Net > 1.2.13 on Windows 2008 R2 > Reporter: Calin Pavel > Priority: Critical > Attachments: log4net.xml > > > I do have an .NET application (Windows Service) that collects data from a lot > of sources (DBs, log files, machines event logs, ...) and uses Log4Net to log > details of the actions / execution. As expected, I'm using a high number of > threads to collect data, threads that are writing logs in some files > (RollingFileAppenderer). > Lately it happens that the entire application is BLOCKED because all threads > were trying to acquire a read lock, like in the stack trace: > 000000001ac3d998 00000000774715fa [HelperMethodFrame: 000000001ac3d998] > System.Threading.Thread.SleepInternal(Int32) > 000000001ac3da90 000007fef747b5e9 System.Threading.Thread.Sleep(Int32) > 000000001ac3dac0 000007fef5fb9631 > System.Threading.ReaderWriterLockSlim.EnterMyLockSpin() > 000000001ac3db90 000007fef5cd297e > System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker) > 000000001ac3dbf0 000007fef5cd28fa > System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker) > 000000001ac3dc40 000007fe98fb4efd > log4net.Repository.Hierarchy.Logger.CallAppenders(log4net.Core.LoggingEvent) > 000000001ac3dcc0 000007fe98fb4907 > log4net.Repository.Hierarchy.Logger.Log(System.Type, log4net.Core.Level, > System.Object, System.Exception) > 000000001ac3dd30 000007fe98fb47f9 log4net.Core.LogImpl.Info(System.Object) > It's important to mention that my threads have a timeout, and if they do not > finish the job in the given interval they are ABORTED. > Searching for a solution, I found a possible explanation of application > hanging here: > http://chabster.blogspot.ro/2013/07/a-story-of-orphaned-readerwriterlockslim.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)