Esempio n. 1
0
		public LogfileReader(string fileName, EncodingOptions encodingOptions, bool multiFile, int bufferCount, int linesPerBuffer, MultifileOptions mutlifileOptions)
		{
			if (fileName == null)
			{
				return;
			}
			_fileName = fileName;
			EncodingOptions = encodingOptions;
			_isMultiFile = multiFile;
			MAX_BUFFERS = bufferCount;
			MAX_LINES_PER_BUFFER = linesPerBuffer;
			_mutlifileOptions = mutlifileOptions;

			InitLruBuffers();

			if (multiFile)
			{
				ILogFileInfo info = GetLogFileInfo(fileName);
				RolloverFilenameHandler rolloverHandler = new RolloverFilenameHandler(info, _mutlifileOptions);
				LinkedList<string> nameList = rolloverHandler.GetNameList();

				ILogFileInfo fileInfo = null;
				foreach (string name in nameList)
				{
					fileInfo = AddFile(name);
				}
				_watchedILogFileInfo = fileInfo;  // last added file in the list is the watched file
			}
			else
			{
				_watchedILogFileInfo = AddFile(fileName);
			}
			StartGCThread();
		}
Esempio n. 2
0
    private void compareReaderImplementations(string fileName, Encoding enc)
    {
      string DataPath = "..\\..\\data\\";
      EncodingOptions encOpts = new EncodingOptions();
      encOpts.Encoding = enc;

      Stream s1 = new FileStream(DataPath + fileName, FileMode.Open, FileAccess.Read);
      PositionAwareStreamReader r1 = new PositionAwareStreamReader(s1, encOpts, false);

      Stream s2 = new FileStream(DataPath + fileName, FileMode.Open, FileAccess.Read);
      PositionAwareStreamReader r2 = new PositionAwareStreamReader(s2, encOpts, true);

      for (int lineNum = 0; ; lineNum++)
      {
        string line1 = r1.ReadLine();
        string line2 = r2.ReadLine();
        if (line1 == null && line2 == null)
        {
          break;
        }
        Assert.AreEqual(line1, line2, "File " + fileName);
        Assert.AreEqual(r1.Position, r2.Position, "Zeile " + lineNum + ", File: " + fileName);
      }
    }
		public PositionAwareStreamReader(Stream stream, EncodingOptions encodingOptions, bool useSystemReaderMethod)
		{
			this.useSystemReaderMethod = useSystemReaderMethod;
			this.stream = new BufferedStream(stream);
			this.preambleLength = DetectPreambleLengthAndEncoding();

			Encoding usedEncoding;
			if (this.detectedEncoding != null && encodingOptions.Encoding == null)
			{
				usedEncoding = this.detectedEncoding;
			}
			else if (encodingOptions.Encoding != null)
			{
				usedEncoding = encodingOptions.Encoding;
			}
			else
			{
				usedEncoding = encodingOptions.DefaultEncoding != null ? encodingOptions.DefaultEncoding : Encoding.Default;
			}

			if (usedEncoding is System.Text.UTF8Encoding)
				posInc_precomputed = 0;
			else if (usedEncoding is System.Text.UnicodeEncoding)
				posInc_precomputed = 2;
			else
				posInc_precomputed = 1;

			this.reader = new StreamReader(this.stream, usedEncoding, true);
			ResetReader();
			Position = 0;

			if (this.useSystemReaderMethod)
			{
				this.newLineSequenceLength = guessNewLineSequenceLength();
			}
		}
Esempio n. 4
0
		public LogfileReader(string[] fileNames, EncodingOptions encodingOptions, int bufferCount, int linesPerBuffer, MultifileOptions mutlifileOptions)
		{
			if (fileNames == null || fileNames.Length < 1)
			{
				return;
			}
			EncodingOptions = encodingOptions;
			_isMultiFile = true;
			MAX_BUFFERS = bufferCount;
			MAX_LINES_PER_BUFFER = linesPerBuffer;
			_mutlifileOptions = mutlifileOptions;

			InitLruBuffers();

			ILogFileInfo fileInfo = null;
			foreach (string name in fileNames)
			{
				fileInfo = AddFile(name);
			}
			_watchedILogFileInfo = fileInfo;
			_fileName = fileInfo.FullName;

			StartGCThread();
		}
Esempio n. 5
0
        private void LoadFilesAsMultiInternal(string[] fileNames, EncodingOptions encodingOptions)
        {
            Logger.logInfo("Loading given files as MultiFile:");

            EnterLoadFileStatus();

            foreach (string name in fileNames)
            {
                Logger.logInfo("File: " + name);
            }

            if (CurrentLogFileReader != null)
            {
                CurrentLogFileReader.stopMonitoring();
                UnRegisterLogFileReaderEvents();
            }

            EncodingOptions = encodingOptions;
            _columnCache = new ColumnCache();

            CurrentLogFileReader = new LogfileReader(
                fileNames,
                EncodingOptions,
                Preferences.bufferCount,
                Preferences.linesPerBuffer,
                _multifileOptions);

            CurrentLogFileReader.UseNewReader = !Preferences.useLegacyReader;
            RegisterLogFileReaderEvents();
            CurrentLogFileReader.startMonitoring();
            FileName = fileNames[fileNames.Length - 1];
            _fileNames = fileNames;
            IsMultiFile = true;
        }
Esempio n. 6
0
        private void LoadFileInternal(string fileName, EncodingOptions encodingOptions)
        {
            EnterLoadFileStatus();

            if (fileName != null)
            {
                FileName = fileName;
                EncodingOptions = encodingOptions;

                if (CurrentLogFileReader != null)
                {
                    CurrentLogFileReader.StopMonitoringAsync();
                    UnRegisterLogFileReaderEvents();
                }
                if (!LoadPersistenceOptions())
                {
                    if (!IsTempFile)
                    {
                        ILogLineColumnizer columnizer = FindColumnizer();
                        if (columnizer != null)
                        {
                            if (_reloadMemento == null)
                            {
                                columnizer = Util.CloneColumnizer(columnizer);
                            }
                        }
                        PreSelectColumnizer(columnizer);
                    }
                    SetDefaultHighlightGroup();
                }

                // this may be set after loading persistence data
                if (_fileNames != null && IsMultiFile)
                {
                    LoadFilesAsMulti(_fileNames, EncodingOptions);
                    return;
                }
                _columnCache = new ColumnCache();
                try
                {
                    CurrentLogFileReader = new LogfileReader(
                        fileName,
                        EncodingOptions,
                        IsMultiFile,
                        Preferences.bufferCount,
                        Preferences.linesPerBuffer,
                        _multifileOptions);
                    CurrentLogFileReader.UseNewReader = !Preferences.useLegacyReader;
                }
                catch (LogFileException lfe)
                {
                    MessageBox.Show("Cannot load file\n" + lfe.Message, "LogExpert");
                    BeginInvoke(new Action<bool>(Close), new object[] { true });
                    _isLoadError = true;
                    return;
                }

                ILogLineXmlColumnizer xmlColumnizer = CurrentColumnizer as ILogLineXmlColumnizer;

                if (xmlColumnizer != null)
                {
                    CurrentLogFileReader.IsXmlMode = true;
                    CurrentLogFileReader.XmlLogConfig = xmlColumnizer.GetXmlLogConfiguration();
                }

                if (_forcedColumnizerForLoading != null)
                {
                    CurrentColumnizer = _forcedColumnizerForLoading;
                }

                IPreProcessColumnizer preProcessColumnizer = CurrentColumnizer as IPreProcessColumnizer;

                if (CurrentColumnizer is IPreProcessColumnizer)
                {
                    CurrentLogFileReader.PreProcessColumnizer = preProcessColumnizer;
                }
                else
                {
                    CurrentLogFileReader.PreProcessColumnizer = null;
                }

                RegisterLogFileReaderEvents();
                Logger.logInfo("Loading logfile: " + fileName);
                CurrentLogFileReader.startMonitoring();
            }
        }
Esempio n. 7
0
 public void LoadFilesAsMulti(string[] fileNames, EncodingOptions encodingOptions)
 {
     LoadFilesAsMultiInternal(fileNames, encodingOptions);
 }
Esempio n. 8
0
 public void LoadFile(string fileName, EncodingOptions encodingOptions)
 {
     LoadFileInternal(fileName, encodingOptions);
 }
Esempio n. 9
0
    public void testShiftBuffers1()
    {
      int linesPerFile = 10;
      MultifileOptions options = new MultifileOptions();
      options.MaxDayTry = 0;
      options.FormatPattern = "*$J(.)";
      LinkedList<string> files = CreateTestfilesWithoutDate();
      EncodingOptions encodingOptions = new EncodingOptions();
      encodingOptions.Encoding = Encoding.Default;
      LogfileReader reader = new LogfileReader(files.Last.Value, encodingOptions, true, 40, 50, options);
      reader.ReadFiles();

      IList<ILogFileInfo> lil = reader.GetLogFileInfoList();
      Assert.AreEqual(files.Count, lil.Count);
      LinkedList<string>.Enumerator enumerator = files.GetEnumerator();
      enumerator.MoveNext();
      foreach (LogFileInfo li in lil)
      {
        string fileName = enumerator.Current;
        Assert.AreEqual(fileName, li.FullName);
        enumerator.MoveNext();
      }
      int oldCount = lil.Count;

      // Simulate rollover
      //
      files = RolloverSimulation(files, "*$J(.)", false);

      // Simulate rollover detection 
      //
      reader.ShiftBuffers();

      lil = reader.GetLogFileInfoList();
      Assert.AreEqual(oldCount + 1, lil.Count);

      Assert.AreEqual(linesPerFile * lil.Count, reader.LineCount);

      // Check if rollover'd file names have been handled by LogfileReader
      //
      Assert.AreEqual(files.Count, lil.Count);
      enumerator = files.GetEnumerator();
      enumerator.MoveNext();
      foreach (LogFileInfo li in lil)
      {
        string fileName = enumerator.Current;
        Assert.AreEqual(fileName, li.FullName);
        enumerator.MoveNext();
      }

      // Check if file buffers have correct files. Assuming here that one buffer fits for a 
      // complete file
      //
      enumerator = files.GetEnumerator();
      enumerator.MoveNext();
      IList<LogBuffer> logBuffers = reader.GetBufferList();
      int startLine = 0;
      foreach (LogBuffer logBuffer in logBuffers)
      {
        Assert.AreEqual(logBuffer.FileInfo.FullName, enumerator.Current);
        Assert.AreEqual(startLine, logBuffer.StartLine);
        startLine += 10;
        enumerator.MoveNext();
      }

      // Checking file content
      //
      enumerator = files.GetEnumerator();
      enumerator.MoveNext();
      enumerator.MoveNext();  // move to 2nd entry. The first file now contains 2nd file's content (because rollover)
      logBuffers = reader.GetBufferList();
      int i;
      for (i = 0; i < logBuffers.Count - 2; ++i)
      {
        LogBuffer logBuffer = logBuffers[i];
        string line = logBuffer.GetLineOfBlock(0);
        Assert.IsTrue(line.Contains(enumerator.Current));
        enumerator.MoveNext();
      }
      enumerator.MoveNext();
      // the last 2 files now contain the content of the previously watched file
      for (; i < logBuffers.Count; ++i)
      {
        LogBuffer logBuffer = logBuffers[i];
        string line = logBuffer.GetLineOfBlock(0);
        Assert.IsTrue(line.Contains(enumerator.Current));
      }

      oldCount = lil.Count;

      // Simulate rollover again - now latest file will be deleted (simulates logger's rollover history limit)
      //
      files = RolloverSimulation(files, "*$J(.)", true);

      // Simulate rollover detection 
      //
      reader.ShiftBuffers();
      lil = reader.GetLogFileInfoList();

      Assert.AreEqual(oldCount, lil.Count);    // same count because oldest file is deleted
      Assert.AreEqual(files.Count, lil.Count);
      Assert.AreEqual(linesPerFile * lil.Count, reader.LineCount);

      // Check first line to see if buffers are correct
      //
      string firstLine = reader.GetLogLine(0);
      string[] names = new string[files.Count];
      files.CopyTo(names, 0);
      Assert.IsTrue(firstLine.Contains(names[2]));
    }
Esempio n. 10
0
		private ILogStreamReader GetLogStreamReader(Stream stream, EncodingOptions encodingOptions, bool useNewReader)
		{
			if (IsXmlMode)
			{
				return new XmlBlockSplitter(new XmlLogReader(new PositionAwareStreamReader(stream, encodingOptions, useNewReader)), XmlLogConfig);
			}
			else
			{
				return new PositionAwareStreamReader(stream, encodingOptions, useNewReader);
			}
		}