예제 #1
0
        /// <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;
            string dataToParse = string.Empty;

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

            while ((line = mFileReader.ReadLine()) != null)
            {
                dataToParse += line;

                int log4NetEndTag = dataToParse.IndexOf(
                    LOG4NET_LOGMSG_END
                    , StringComparison.Ordinal);

                if (log4NetEndTag > 0)
                {
                    LogMessage newLogMsg;

                    try
                    {
                        newLogMsg = new LogMessageLog4Net(
                            dataToParse
                            , ++mLogNumber);
                    }
                    catch (Exception ex)
                    {
                        Logger.Warn(ex.Message);
                        continue;
                    }

                    messages.Enqueue(newLogMsg);

                    dataToParse = dataToParse.Substring(
                        log4NetEndTag
                        , dataToParse.Length - (log4NetEndTag + LOG4NET_LOGMSG_END.Length));
                }
            }

            mLastFileOffset = mFileReader.BaseStream.Position;

            mLogHandler?.HandleMessage(messages.ToArray());
        }
예제 #2
0
        /// <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;
            }

            mFileReader.BaseStream.Seek(
                mLastFileOffset
                , SeekOrigin.Begin);

            string line;
            string dataToParse = string.Empty;

            List <LogMessage> messages = new List <LogMessage>();

            while ((line = mFileReader.ReadLine()) != null)
            {
                dataToParse += line;

                int log4NetEndTag = dataToParse.IndexOf(
                    NLOG_LOGMSG_END
                    , StringComparison.Ordinal);

                if (log4NetEndTag > 0)
                {
                    LogMessage newLogMsg;

                    try
                    {
                        newLogMsg = new LogMessageLog4Net(
                            dataToParse
                            , ++mLogNumber);
                    }
                    catch (Exception ex)
                    {
                        Logger.Warn(ex.Message);
                        continue;
                    }

                    messages.Add(newLogMsg);

                    dataToParse = dataToParse.Substring(
                        log4NetEndTag
                        , dataToParse.Length - (log4NetEndTag + NLOG_LOGMSG_END.Length));
                }
            }

            mLastFileOffset = mFileReader.BaseStream.Position;

            if (mLogHandler != null)
            {
                mLogHandler.HandleMessage(messages.ToArray());
            }
        }
예제 #3
0
        /// <summary>
        /// Listen for incomming <see cref="LogMessage"/>s.
        /// </summary>
        /// <param name="newSocket">the <see cref="Socket"/> object that may received new data.</param>
        private void Listening(object newSocket)
        {
            try
            {
                using (Socket socket = (Socket)newSocket)
                {
                    using (NetworkStream ns = new NetworkStream(socket, FileAccess.Read, false))
                    {
                        while (mSocket != null)
                        {
                            try
                            {
                                byte[]        receivedBytes   = new byte[1024];
                                StringBuilder receivedMessage = new StringBuilder();

                                do
                                {
                                    int receivedByteCount = ns.Read(
                                        receivedBytes
                                        , 0
                                        , receivedBytes.Length);

                                    receivedMessage.Append(Encoding.ASCII.GetString(
                                                               receivedBytes
                                                               , 0
                                                               , receivedByteCount));
                                }while(ns.DataAvailable);

                                LogMessage newLogMsg = new LogMessageLog4Net(
                                    receivedMessage.ToString()
                                    , ++mLogNumber);

                                if (mLogHandler != null)
                                {
                                    mLogHandler.HandleMessage(newLogMsg);
                                }
                            }
                            catch (Exception ex)
                            {
                                Logger.Warn(ex.Message);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Warn(ex.Message);
            }
        }
예제 #4
0
        /// <summary>
        /// Handles the received UDP message event.
        /// </summary>
        /// <param name="ar">The <see cref="IAsyncResult"/> object that contains necessary meta data.</param>
        private void ReceiveUdpMessage(IAsyncResult ar)
        {
            UdpClient client = ((UdpState)ar.AsyncState).Client;

            IPEndPoint wantedIpEndPoint   = ((UdpState)(ar.AsyncState)).EndPoint;
            IPEndPoint receivedIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

            Byte[] receiveBytes;

            try
            {
                receiveBytes = client.EndReceive(
                    ar
                    , ref receivedIpEndPoint);
            }
            catch (ObjectDisposedException)
            {
                // The socket seems to be already closed.
                return;
            }

            bool isRightHost = (wantedIpEndPoint.Address.Equals(receivedIpEndPoint.Address)) ||
                               wantedIpEndPoint.Address.Equals(IPAddress.Any);

            if (isRightHost && receiveBytes != null)
            {
                try
                {
                    LogMessage newLogMsg = new LogMessageLog4Net(
                        mEncoding.GetString(receiveBytes)
                        , ++mLogNumber);

                    if (mLogHandler != null)
                    {
                        mLogHandler.HandleMessage(newLogMsg);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Warn(ex.Message);
                }
            }

            client.BeginReceive(ReceiveUdpMessage, ar.AsyncState);
        }
예제 #5
0
        /// <summary>
        /// Selects the given <paramref name="message"/>.
        /// </summary>
        /// <param name="message">The <see cref="LogMessage"/> o select</param>
        public bool SelectLogMessage(LogMessage message)
        {
            LogMessageLog4Net logMessage = message as LogMessageLog4Net;

            try
            {
                this.SuspendDrawing();

                if (logMessage != null)
                {
                    txtDataLogger.Text   = logMessage.Logger;
                    txtDataLevel.Text    = logMessage.Level.ToString();
                    txtDataDateTime.Text = logMessage.Timestamp.Add(logMessage.TimeShiftOffset).ToString(Settings.Default.TimestampFormat);
                    txtDataThread.Text   = logMessage.Thread;

                    if (logMessage.TimeShiftOffset.Milliseconds != 0)
                    {
                        txtDataDateTime.Text += string.Format(
                            Resources.strLoggerDetailsCtrlOffset
                            , logMessage.TimeShiftOffset.Milliseconds);
                    }

                    // Replace all known new line character combinations with the .net one.
                    txtDataMessage.Text = Regex.Replace(
                        logMessage.Message
                        , @"\r(?!\n)|(?<!\r)\n"
                        , Environment.NewLine);

                    StringBuilder dataBuilder = new StringBuilder();

                    dataBuilder.AppendLine(!string.IsNullOrEmpty(logMessage.Location.MethodName)
            ? logMessage.Location.MethodName
            : string.Empty);

                    dataBuilder.AppendLine(!string.IsNullOrEmpty(logMessage.Location.ClassName)
            ? logMessage.Location.ClassName
            : string.Empty);

                    dataBuilder.AppendLine(!string.IsNullOrEmpty(logMessage.Location.FileName)
            ? logMessage.Location.FileName
            : string.Empty);

                    txtDataLocation.Text = dataBuilder.ToString().Trim();

                    if (logMessage.CustomProperties == null || logMessage.CustomProperties.Count == 0)
                    {
                        txtDataProperties.Text = string.Empty;
                    }
                    else
                    {
                        dataBuilder = new StringBuilder();

                        foreach (KeyValuePair <string, string> customData in logMessage.CustomProperties)
                        {
                            dataBuilder.AppendFormat("{0}: {1}{2}", customData.Key, customData.Value, Environment.NewLine);
                        }

                        txtDataProperties.Text = dataBuilder.ToString();
                    }
                }
                else
                {
                    txtDataLogger.Text = string.Empty;
                    txtDataLevel.Text  = message != null?message.Level.ToString() : string.Empty;

                    txtDataDateTime.Text = message != null?message.Timestamp.ToString(Settings.Default.TimestampFormat) : string.Empty;

                    txtDataThread.Text  = string.Empty;
                    txtDataMessage.Text = message != null?message.Message.Trim() : string.Empty;

                    txtDataProperties.Text = string.Empty;
                }

                pbxCopyLogger.Visible     = !string.IsNullOrEmpty(txtDataLogger.Text);
                pbxCopyLevel.Visible      = !string.IsNullOrEmpty(txtDataLevel.Text);
                pbxCopyThread.Visible     = !string.IsNullOrEmpty(txtDataThread.Text);
                pbxCopyDateTime.Visible   = !string.IsNullOrEmpty(txtDataDateTime.Text);
                pbxCopyMessage.Visible    = !string.IsNullOrEmpty(txtDataMessage.Text);
                pbxCopyLocation.Visible   = !string.IsNullOrEmpty(txtDataLocation.Text);
                pbxCopyProperties.Visible = !string.IsNullOrEmpty(txtDataProperties.Text);
            }
            finally
            {
                txtDataMessage.AdjustHeightToContent();
                txtDataProperties.AdjustHeightToContent();

                this.ResumeDrawing();
            }

            return(true);
        }