Ejemplo n.º 1
0
        private DelimitedLogLine CreateDelimitedLogLineFromReturnedLine(ReturnedLine returnedLine)
        {
            string rawLine = returnedLine.Line;

            List <LogLineField> individualFields = new List <LogLineField>();

            DelimitedLogLine delimitedLogLine = new DelimitedLogLine
            {
                RawLine  = rawLine,
                FilePath = returnedLine.FilePath,
                LineStartsAtByteLocation = returnedLine.LineStartsAtByteLocation,
                LineEndsAtByteLocation   = returnedLine.LineEndsAtByteLocation
            };

            int i = 0;

            if (rawLine.Contains(_appenderLayout.Header) ||
                rawLine.Contains(_appenderLayout.Footer) ||
                string.IsNullOrWhiteSpace(rawLine))
            {
                foreach (LogLineField field in _appenderLayout.ConversionPattern.Fields)
                {
                    string content = field.Name == "Message" ? rawLine : string.Empty;

                    individualFields.Add(new LogLineField
                    {
                        Name    = field.Name,
                        Content = content
                    });
                }
            }
            else
            {
                try
                {
                    foreach (LogLineField field in _appenderLayout.ConversionPattern.Fields)
                    {
                        if (field.Type == LogLineType.FixedWidth)
                        {
                            individualFields.Add(new LogLineField {
                                Name    = field.Name,
                                Content = rawLine.Substring(i, field.FixedWidth).Trim(),
                            });

                            i += field.FixedWidth;
                        }
                        else if (field.Type == LogLineType.Delimited)
                        {
                            int startPos    = field.MinWidth + i;
                            int fieldEndPos = rawLine.IndexOf(field.EndingCharacter, startPos);

                            if (fieldEndPos == i)
                            {
                                fieldEndPos = rawLine.Length;
                            }

                            int fieldLength = fieldEndPos - i;

                            individualFields.Add(new LogLineField {
                                Name    = field.Name,
                                Content = rawLine.Substring(i, fieldLength).Trim()
                            });

                            i += fieldLength;
                        }
                    }
                }
                catch
                {
                    individualFields.Clear();

                    foreach (LogLineField field in _appenderLayout.ConversionPattern.Fields)
                    {
                        string content = field.Name == "Message" ? rawLine : string.Empty;

                        individualFields.Add(new LogLineField
                        {
                            Name    = field.Name,
                            Content = content
                        });
                    }
                }
            }

            delimitedLogLine.Fields = individualFields;

            return(delimitedLogLine);
        }
Ejemplo n.º 2
0
 public AddDelimitedLineToDataSource(DelimitedLogLine delimitedLogLine)
 {
     DelimitedLogLine = delimitedLogLine;
 }