logging-log4net-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Calin Pavel (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (LOG4NET-443) Logger.CallAppenders
Date Tue, 21 Oct 2014 08:44:34 GMT

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

Mime
View raw message