protected override void WriteTrace(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message, Guid?relatedActivityId, object[] data)
        {
            var  traceTime  = TraceFormatter.FormatUniversalTime(eventCache);
            int  maxPerHour = MaxTracesPerHour;
            bool sendEmail  = false;

            if (maxPerHour > 0)
            {
                lock (floodLimitLock)
                {
                    if (traceTime > floodLimitReset)
                    {
                        // start a new flood limit
                        floodLimitReset     = traceTime.Add(floodLimitWindow);
                        floodNumberOfTraces = 0;
                    }
                    if (floodNumberOfTraces < maxPerHour)
                    {
                        floodNumberOfTraces++;
                        sendEmail = true;
                    }
                }
            }
            else
            {
                sendEmail = true;
            }

            if (sendEmail)
            {
                string subject = traceFormatter.Format(SubjectTemplate, this, eventCache, source,
                                                       eventType, id, message, relatedActivityId, data);

                string body = traceFormatter.Format(BodyTemplate, this, eventCache, source, eventType, id,
                                                    message, relatedActivityId, data);

                // Use hidden/undocumented attribute to switch versions (for testing)
                if (Attributes["poolVersion"] == "B")
                {
                    SmtpWorkerPoolB.BeginSend(FromAddress, ToAddress, subject, body, null, null);
                    return;
                }
                SmtpWorkerPoolC.BeginSend(FromAddress, ToAddress, subject, body, null, null);
            }
            else
            {
                Debug.WriteLine("Dropped message due to flood protection.");
            }
        }
Example #2
0
        /// <summary>
        /// Write trace event with data.
        /// </summary>
        protected override void WriteTrace(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message, Guid?relatedActivityId, object[] data)
        {
            // NOTE: In Microsoft.VisualBasic.Logging.FileLogTraceListener the following are output separated
            // by a configurable delimiter:
            //   source, TraceEventType, id, message,
            // Then, based on TraceOutputOptions:
            //   call stack, logical operation stack, datetime (UTC, format "u"), process id, thread id, timestamp
            // Then, based on listener options:
            //   host name

            // Supporting a template string kind of makes TraceOutputOptions redundant,
            // but could support for backwards compatibility.
            // i.e. if any T-O-O are set, then append them anyway??

            var output = traceFormatter.Format(Template,
                                               this,
                                               eventCache,
                                               source,
                                               eventType,
                                               id,
                                               message,
                                               relatedActivityId,
                                               data
                                               );

            rollingTextWriter.WriteLine(eventCache, output);
        }
Example #3
0
        /// <summary>
        /// Write trace event with data.
        /// </summary>
        protected override void WriteTrace(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message, Guid?relatedActivityId, object[] data)
        {
            /*
             * TraceTemplate templateArguments = new TraceTemplate() {
             *  eventCache = eventCache,
             *  source = source,
             *  eventType = eventType,
             *  id = id,
             *  message = message,
             *  relatedActivityId = relatedActivityId,
             *  data = data,
             * };
             * string output = StringTemplate.Format(Template, templateArguments.GetArgument);
             */

            var output = traceFormatter.Format(Template,
                                               this,
                                               eventCache,
                                               source,
                                               eventType,
                                               id,
                                               message,
                                               relatedActivityId,
                                               data
                                               );

            WriteLineColored(eventCache, eventType, output);
        }
        /// <summary>
        /// Write trace event with data.
        /// </summary>
        protected override void WriteTrace(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message, Guid?relatedActivityId, object[] data)
        {
            var  traceDetails = traceFormatter.Format(TraceTemplate, this, eventCache, source, eventType, id, message, relatedActivityId, data);
            bool firstMessage = false;

            lock (bufferLock)
            {
                if (eventMessagesBuffer.Length == 0)
                {
                    firstMessage = true;
                }
                eventMessagesBuffer.AppendLine(traceDetails);
            }
            if (firstMessage)
            {
                eventMessagesSubject = traceFormatter.Format(SubjectTemplate, this, eventCache, source, eventType, id, message, relatedActivityId, data);
                eventMessagesHeader  = traceFormatter.Format(HeaderTemplate, this, eventCache, source, eventType, id, message, relatedActivityId, data);
            }
        }
        /// <summary>
        /// Determines whether the event should be traced by the listener or not.
        /// </summary>
        public override bool ShouldTrace(TraceEventCache cache, string source, TraceEventType eventType, int id, string formatOrMessage, object[] args, object data1, object[] data)
        {
            if (data == null)
            {
                data = new object[] { data1 };
            }
            string propertyValue = traceFormatter.Format(propertyTemplate, null, cache, source, eventType, id, null,
                                                         null, data);

            return(propertyValue.Equals(comparisonValue));
        }