Beispiel #1
0
        public override void DoWork(bool stopping)
        {
            var    batchBuilder = new StringBuilder();
            string logMessage   = null;
            string logFileName  = null;
            var    success      = false;
            var    x            = 0;

            using (this.Lock())
            {
                if (queuedEvents.Count > 0)
                {
                    var logRelayEvent = queuedEvents.Peek();
                    var buffer        = new StringWriter(new StringBuilder(256));

                    formatter.Format(logRelayEvent.LogEvent, buffer);

                    logMessage  = buffer.ToString();
                    logFileName = logRelayEvent.LogFileName;
                }
            }

            if (logMessage != null)
            {
                while (!success)
                {
                    try
                    {
                        var fileInfo = new FileInfo(logFileName);

                        if (!fileInfo.Directory.Exists)
                        {
                            fileInfo.Directory.Create();
                        }

                        WriteToLog(logFileName, logMessage + "\r\n");
                        success = true;
                    }
                    catch
                    {
                        if (x == 3)
                        {
                            break;
                        }

                        Thread.Sleep(1);
                        x++;
                    }
                }

                if (success)
                {
                    using (this.Lock())
                    {
                        queuedEvents.Dequeue();
                    }
                }
            }
        }