[ 
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)

Reply via email to