public void Format__CorrectlyFormatsAllPlaceholders()
        {
            var pattern = "ABC{P.1}{P.2} DEF {P.3}";

            var formatter = new PatternFormatter();
            formatter.Pattern = pattern;

            var de = new DiagnosticEvent();
            de.Properties.TryAddProperty("P.1", () => 1);
            de.Properties.TryAddProperty("P.2", () => 2);
            de.Properties.TryAddProperty("P.3", () => 3);

            var resut = formatter.Format(de, new TypeDescriptorCollection());

            Assert.AreEqual("ABC12 DEF 3", resut);
        }
Esempio n. 2
0
            GetRequestedContextData()
        {
            var l1 = BodyFormatter.GetRequestedContextData();

            PatternFormatter f = new PatternFormatter();
            f.Pattern = To;

            var l2 = f.GetRequestedContextData();
            
            var l3 = Subject.GetRequestedContextData();

            return l1.Concat(l2).Concat(l3).ToList();
        }
Esempio n. 3
0
        public override void Write(Entities.DiagnosticEvent de)
        {
            if(Bundle != null)
            {
                if(Bundle.TryBundle(de))
                {
                    // event added to the bundle
                    // do nothing else
                    return;
                }
                else
                {
                    // event not added to bundle,
                    // proceed as usual
                }
            }

            // TODO: allow to specify smtp config in diag config rather than always using one from app.config

            // TODO: this is just a quick mockup to get it working for demo, must be rewriten properly

            PatternFormatter f = new PatternFormatter();

            var msg = new MailMessage();

            var toElements = To.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < toElements.Length; i++)
            {
                f = new PatternFormatter();
                f.Pattern = toElements[i];

                var toformatted = f.Format(de, new TypeDescriptorCollection());
                msg.To.Add(toformatted);
            }

            msg.From = new MailAddress(From);

            msg.Subject = Subject.Format(de, new TypeDescriptorCollection());

            msg.Body = BodyFormatter.Format(de, new TypeDescriptorCollection());

            if(!LogsToAttach.IsNullOrEmpty())
            {
                // todo: support multiple logs

                var config_ref = GlobalDiagnostics.GlobalLogger.Config;

                var sink = 
                    (from s in config_ref.SinkDefinitions
                         where s is FileSink
                         && s.Name == LogsToAttach
                         select s as FileSink).FirstOrDefault();


                var attachmentStream = new MemoryStream();

                using(var l = sink.FileLockingStrategy.AcquireLock(sink.LogFile.FullName))
                {                   
                    using (var fs = new FileStream(sink.SinkLocation.Location, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        using(var gz = new GZipStream(attachmentStream, CompressionMode.Compress, leaveOpen: true))
                        {
                            fs.CopyTo(gz);
                        }
                    }
                }

                if(attachmentStream != null)
                {
                    attachmentStream.Seek(0, SeekOrigin.Begin);

                    var attachment = new Attachment(attachmentStream, sink.LogFile.Name + ".gz");
                    msg.Attachments.Add(attachment);
                }
            }


            SmtpClient.Send(msg);
        }
        void TryConvertStringToPropertyValue(FlexiXmlSerializationService.ConvertStringToPropertyValueEventArgs e)
        {
            var configuration = e.DeserializationRootObject as DiagnosticsConfiguration;

            if (FilterType.IsAssignableFrom(e.DeclaringType)
                && LogLevelType.IsEqualTo(e.PropertyInfo.PropertyType))
            {
                SeverityLevel result;

                if (configuration.SeverityLevels.TryFindByName(e.ValueAsString, out result))
                {
                    e.Handle(result);
                    return;
                }
            }

            if(e.PropertyInfo.PropertyType == typeof(IFormatter))
            {
                var formatter = new PatternFormatter();
                formatter.Pattern = e.ValueAsString;

                e.Handle(formatter);
                return;
            }

            if(e.DeclaringType == typeof(DefaultArchiveStrategy) && e.PropertyInfo.Name == "TriggerOnFileSize")
            {
                string fileSizeAsString = null;
                int multiplier = 0;

                if (e.ValueAsString.EndsWith("GB"))
                {
                    var str = e.ValueAsString;
                    fileSizeAsString = str.Substring(0, str.Length - "KB".Length);
                    multiplier = 1000000000;
                }
                else if(e.ValueAsString.EndsWith("MB"))
                {
                    var str = e.ValueAsString;
                    fileSizeAsString = str.Substring(0, str.Length - "MB".Length);
                    multiplier = 1000000;
                }
                else if(e.ValueAsString.EndsWith("KB"))
                {
                    var str = e.ValueAsString;
                    fileSizeAsString = str.Substring(0, str.Length - "KB".Length);
                    multiplier = 1000;
                }

                if (!fileSizeAsString.IsNullOrEmpty())
                {
                    long result = 0;
                    if (long.TryParse(fileSizeAsString, out result))
                    {
                        e.Handle(result * multiplier);
                    }
                }
            }
        }