Beispiel #1
0
        /// <summary>
        /// Determines whether the <see cref="ReceiverBase"/> instance can handle the given file name as log file.
        /// </summary>
        /// <returns><c>True</c> if the file can be handled, otherwise <c>false</c>.</returns>
        public override bool CanHandleLogFile()
        {
            if (string.IsNullOrEmpty(mFileToObserve) || !File.Exists(mFileToObserve))
            {
                return(false);
            }

            using (StreamReader tmpReader = new StreamReader(mFileToObserve))
            {
                string firstLine = tmpReader.ReadLine();
                return(LogMessageNLogSimple.TryParse(firstLine, 0, out _));
            }
        }
        /// <summary>
        /// Reads possible new log file entries form the file that is observed.
        /// </summary>
        private void ReadNewLogMessagesFromFile()
        {
            if (mFileReader == null || Equals(mFileReader.BaseStream.Length, mLastFileOffset))
            {
                return;
            }

            if (mLastFileOffset > mFileReader.BaseStream.Length)
            {
                // the current log file was re-created. Observe from beginning on.
                mLastFileOffset = 0;
            }
            mFileReader.BaseStream.Seek(mLastFileOffset, SeekOrigin.Begin);

            string line;
            LogMessageNLogSimple newLogMsg = null;

            FixedSizedQueue <LogMessage> messages = new FixedSizedQueue <LogMessage>(
                Properties.Settings.Default.MaxLogMessages);

            while ((line = mFileReader.ReadLine()) != null)
            {
                try
                {
                    if (LogMessageNLogSimple.TryParse(line, mLogNumber, out LogMessageNLogSimple message))
                    {
                        newLogMsg = message;
                        messages.Enqueue(newLogMsg);
                        ++mLogNumber;
                    }
                    else
                    {
                        newLogMsg?.AppendMessage(line);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Warn(ex.Message);
                    continue;
                }
            }
            mLastFileOffset = mFileReader.BaseStream.Position;
            mLogHandler?.HandleMessage(messages.ToArray());
        }