예제 #1
0
        static (IDictionary <string, object>, string) ExtractValues(string pattern, string candidate)
        {
            var parsed    = ExtractionPatternParser.Parse(pattern);
            var extractor = ExtractionPatternInterpreter.CreateNameValueExtractor(parsed);

            return(extractor.ExtractValues(candidate));
        }
        public void ARegularStringIsASingleTextLiteral()
        {
            var pattern = ExtractionPatternParser.Parse("Hello!");

            Assert.Single(pattern.Elements);
            var tt = Assert.IsType <LiteralTextPatternExpression>(pattern.Elements.Single());

            Assert.Equal("Hello!", tt.Text);
        }
        public void CaptureNameAndTypeAreParsed()
        {
            var pattern = ExtractionPatternParser.Parse("{abc:def}");

            Assert.Single(pattern.Elements);
            var ct = Assert.IsType <CapturePatternExpression>(pattern.Elements.Single());

            Assert.Equal("abc", ct.Name);
            Assert.Equal("def", ((MatchTypeContentExpression)ct.Content).Type);
        }
 public void OnlyValidPatternsAreAccepted(string attempt, bool isValid)
 {
     if (isValid)
     {
         ExtractionPatternParser.Parse(attempt);
     }
     else
     {
         Assert.Throws <ParseException>(() => ExtractionPatternParser.Parse(attempt));
     }
 }
예제 #5
0
        public void TheTrailingIndentPatternDoesNotMatchLinesStartingWithWhitespace()
        {
            var multilineMessageExtractor =
                ExtractionPatternInterpreter.CreateNameValueExtractor(
                    ExtractionPatternParser.Parse("{@m:trailingindent}"));
            var frame = " world";

            var(properties, remainder) = multilineMessageExtractor.ExtractValues(frame);
            Assert.Empty(properties);
            Assert.Equal(frame, remainder);
        }
예제 #6
0
        public void TheTrailingIndentPatternMatchesMultilineMessages()
        {
            var multilineMessageExtractor =
                ExtractionPatternInterpreter.CreateNameValueExtractor(
                    ExtractionPatternParser.Parse("{@m:trailingindent}"));
            var frame = $"Hello,{Environment.NewLine} world!";

            var(properties, remainder) = multilineMessageExtractor.ExtractValues(frame);
            Assert.Null(remainder);
            Assert.Single(properties, p => p.Key == ReifiedProperties.Message &&
                          ((TextSpan)p.Value).ToStringValue() == frame);
        }
        public PlainTextLogEventReader(TextReader input, string extractionPattern)
        {
            if (extractionPattern == null)
            {
                throw new ArgumentNullException(nameof(extractionPattern));
            }
            _nameValueExtractor = ExtractionPatternInterpreter.CreateNameValueExtractor(ExtractionPatternParser.Parse(extractionPattern));

            _reader = new FrameReader(input, SpanEx.MatchedBy(_nameValueExtractor.StartMarker), TrailingLineArrivalDeadline);
        }