Esempio n. 1
0
        /// <summary>
        /// Reads the log item fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <param name="isRepeated">true if the log item is repeated from a previous file, false if it is written for the first time.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogScopeItem Read(FieldLogFileReader reader, bool isRepeated)
        {
            FieldLogScopeItem item = new FieldLogScopeItem();

            item.ReadBaseData(reader);
            item.IsRepeated = isRepeated;
            item.Type       = (FieldLogScopeType)reader.ReadByte();
            item.Level      = reader.ReadInt32();
            item.Name       = reader.ReadString();

            if (item.Type == FieldLogScopeType.ThreadStart)
            {
                byte flags = reader.ReadByte();
                item.IsBackgroundThread = (flags & 1) != 0;
                item.IsPoolThread       = (flags & 2) != 0;
            }
            if (item.Type == FieldLogScopeType.LogStart)
            {
                item.EnvironmentData = FieldLogEventEnvironment.Read(reader);
            }
            if (item.Type == FieldLogScopeType.WebRequestStart && reader.FormatVersion >= 2)
            {
                item.WebRequestData = FieldLogWebRequestData.Read(reader);
            }
            return(item);
        }
Esempio n. 2
0
        /// <summary>
        /// Reads the exception fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <returns>The exception data.</returns>
        internal static FieldLogException Read(FieldLogFileReader reader)
        {
            FieldLogException ex = new FieldLogException();

            ex.Type = reader.ReadString();
            if (reader.FormatVersion >= 2)
            {
                ex.TypeModule = reader.ReadString();
                ex.Token      = reader.ReadInt32();
            }
            ex.Message = reader.ReadString();
            ex.Code    = reader.ReadInt32();
            ex.Data    = reader.ReadString();
            int frameCount = reader.ReadInt32();

            ex.StackFrames = new FieldLogStackFrame[frameCount];
            for (int i = 0; i < frameCount; i++)
            {
                ex.StackFrames[i] = FieldLogStackFrame.Read(reader);
            }
            int innerCount = reader.ReadInt32();

            ex.InnerExceptions = new FieldLogException[innerCount];
            for (int i = 0; i < innerCount; i++)
            {
                ex.InnerExceptions[i] = FieldLogException.Read(reader);
            }
            return(ex);
        }
Esempio n. 3
0
        /// <summary>
        /// Reads the log item fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogDataItem Read(FieldLogFileReader reader)
        {
            FieldLogDataItem item = new FieldLogDataItem();

            item.ReadBaseData(reader);
            item.Name  = reader.ReadString();
            item.Value = reader.ReadString();
            return(item);
        }
Esempio n. 4
0
        /// <summary>
        /// Reads the log item fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogTextItem Read(FieldLogFileReader reader)
        {
            FieldLogTextItem item = new FieldLogTextItem();

            item.ReadBaseData(reader);
            item.Text    = reader.ReadString();
            item.Details = reader.ReadString();
            return(item);
        }
Esempio n. 5
0
        /// <summary>
        /// Reads the log item fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogExceptionItem Read(FieldLogFileReader reader)
        {
            FieldLogExceptionItem item = new FieldLogExceptionItem();

            item.ReadBaseData(reader);
            item.Exception       = FieldLogException.Read(reader);
            item.Context         = reader.ReadString();
            item.EnvironmentData = FieldLogEventEnvironment.Read(reader);
            return(item);
        }
        /// <summary>
        /// Sets the close signal for the currently used log file reader.
        /// </summary>
        public void Close()
        {
            reader.Close();
            // Also close all other readers of this enumerator, just to be sure
            FieldLogFileReader r = firstReader;

            do
            {
                r.Close();
                r = r.NextReader;
            }while (r != null);
        }
        /// <summary>
        /// Disposes of all FieldLogFileReader in this enumerator, beginning with the first.
        /// </summary>
        public void Dispose()
        {
            FieldLogFileReader r = firstReader;

            while (r != null)
            {
                FieldLogFileReader r2 = r;
                r = r.NextReader;
                r2.Dispose();
            }
            GC.SuppressFinalize(this);
        }
Esempio n. 8
0
 /// <summary>
 /// Reads the common log item fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 protected void ReadBaseData(FieldLogFileReader reader)
 {
     LogItemSourceFileName = reader.FileName;
     FileFormatVersion     = reader.FormatVersion;
     Time         = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
     EventCounter = reader.ReadInt32();
     Priority     = (FieldLogPriority)reader.ReadByte();
     SessionId    = new Guid(reader.ReadBytes(16));
     ThreadId     = reader.ReadInt32();
     if (reader.FormatVersion >= 2)
     {
         WebRequestId = reader.ReadUInt32();
     }
 }
        /// <summary>
        /// Determines whether the enumerator contains the specified log file.
        /// </summary>
        /// <param name="fileName">The full name of the log file to locate in the enumerator.</param>
        /// <returns>true if the enumerator contains the specified log file reader; otherwise, false.</returns>
        public bool ContainsFile(string fileName)
        {
            FieldLogFileReader r = firstReader;

            while (r != null)
            {
                if (r.FileName == fileName)
                {
                    return(true);
                }
                r = r.NextReader;
            }
            return(false);
        }
Esempio n. 10
0
        /// <summary>
        /// Reads the stack frame fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <returns>The stack frame data.</returns>
        internal static FieldLogStackFrame Read(FieldLogFileReader reader)
        {
            FieldLogStackFrame frame = new FieldLogStackFrame();

            frame.Module = reader.ReadString();
            if (reader.FormatVersion >= 2)
            {
                frame.Token    = reader.ReadInt32();
                frame.ILOffset = reader.ReadInt32();
            }
            frame.TypeName        = reader.ReadString();
            frame.MethodName      = reader.ReadString();
            frame.MethodSignature = reader.ReadString();
            frame.FileName        = reader.ReadString();
            frame.Line            = reader.ReadInt32();
            frame.Column          = reader.ReadInt32();
            return(frame);
        }
        /// <summary>
        /// Creates a new log file reader and adds it to the priority's log file enumerator.
        /// </summary>
        /// <param name="prio">The priority of files to write.</param>
        /// <param name="fileName">The name of the log file.</param>
        /// <param name="fromFsw">Indicates whether the reader was created from a FileSystemWatcher event.</param>
        private void AddNewReader(FieldLogPriority prio, string fileName, bool fromFsw)
        {
            // Must be within a lock(readerLock)!
            FL.Trace("AddNewReader, prio=" + prio + ", fileName=" + Path.GetFileName(fileName) + ", fromFsw=" + fromFsw);

            // Reject the new file if it's already in the queue (delayed FSW event after active scan)
            if (readers.ContainsKey(prio) &&
                readers[prio] != null &&
                readers[prio].ContainsFile(fileName))
            {
                // This file is already current or queued
                FL.Checkpoint("This file is already current or queued");
                return;
            }

            var reader = new FieldLogFileReader(fileName, true);
            ManualResetEvent h;

            if (!prioReadSignals.TryGetValue(prio, out h))
            {
                h = new ManualResetEvent(false);
                prioReadSignals[prio] = h;
            }
            reader.ReadWaitHandle = h;

            if (!readers.ContainsKey(prio) || readers[prio] == null)
            {
                // This is the first file of this priority
                readers[prio]        = new FieldLogFileEnumerator(reader);
                readers[prio].Error += FieldLogFileEnumerator_Error;
                readTasks[(int)prio] = Task <bool> .Factory.StartNew(readers[prio].MoveNext);

                // Signal the blocking ReadLogItem method that there's a new reader now
                newFilePrioEvent.Set();
            }
            else
            {
                // Chain the new reader after the last reader in the queue
                readers[prio].Append(reader, fromFsw);

                // TODO,DEBUG: What for?
                //newFilePrioEvent.Set();
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Reads a log item from the log file.
        /// </summary>
        /// <param name="reader">Log file reader.</param>
        /// <param name="type">The type of log item to read.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogItem Read(FieldLogFileReader reader, FieldLogItemType type)
        {
            switch (type)
            {
            case FieldLogItemType.Text:
                return(FieldLogTextItem.Read(reader));

            case FieldLogItemType.Data:
                return(FieldLogDataItem.Read(reader));

            case FieldLogItemType.Exception:
                return(FieldLogExceptionItem.Read(reader));

            case FieldLogItemType.Scope:
            case FieldLogItemType.RepeatedScope:
                return(FieldLogScopeItem.Read(reader, type == FieldLogItemType.RepeatedScope));
            }
            throw new ArgumentException("Unsupported log item type (" + (int)type + ")");
        }
        /// <summary>
        /// Advances the enumerator to the next log item of the currently read log file. If there
        /// are no more items in this file and there is a NextReader set, the first log item of the
        /// next file reader is selected. If there are no more items in this file and WaitMode is
        /// set, the method will block until another log item is appended to the current file or
        /// the wait operation is cancelled by a close event.
        /// </summary>
        /// <returns>true if the enumerator was successfully advanced to the next log item;
        /// false if the enumerator has passed the end of the collection.</returns>
        public bool MoveNext()
        {
            FieldLogFileReader nextReader = null;

            do
            {
                if (nextReader != null)
                {
                    FL.Trace(reader.ItemCount + " items read from " + Path.GetFileName(reader.FileName));
                    reader = nextReader;
                    FL.Trace("Switching to next reader " + Path.GetFileName(reader.FileName));
                }

                try
                {
                    item = reader.ReadLogItem();
                }
                catch (Exception ex)
                {
                    FL.Error(ex, "Reading item from log file");
                    OnError(ex);
                    // Skip the rest of the current file and continue with the next one if
                    // available. If this is the last file and WaitMode is set, this priority will
                    // not be monitored anymore.
                    item = null;
                }

                if (item == null && reader.IsClosing)
                {
                    // Close event must have been set
                    Dispose();
                    return(false);
                }
                nextReader = reader.NextReader;
            }while (item == null && nextReader != null);
            return(item != null);
        }
        /// <summary>
        /// Appends a new FieldLogFileReader at the end of this enumerator.
        /// </summary>
        /// <param name="newReader">The new reader to append.</param>
        /// <param name="fromFsw">Indicates whether the reader was created from a FileSystemWatcher event.</param>
        public void Append(FieldLogFileReader newReader, bool fromFsw)
        {
            FieldLogFileReader currentLastReader = LastReader;

            currentLastReader.NextReader = newReader;
            // Unset wait mode for this reader, now that we know where to continue after this file
            if (fromFsw)
            {
                // The file is newly created. Take some time to actually start reading the previous
                // file before switching to this one. Once the first item has been read from the
                // file, more items will likely exist in the file, and the file is read until the
                // end. Then it will still sit there waiting for more items until the rest of this
                // delay has elapsed (which is not a big problem, if we get any items from that
                // file at all).
#if NET20
                new Thread(() =>
                {
                    Thread.Sleep(1000);
                    currentLastReader.WaitMode = false;
                }).Start();
#else
                Task.Factory.StartNew(() =>
                {
                    Thread.Sleep(1000);
                    currentLastReader.WaitMode = false;
                });
#endif
            }
            else
            {
                currentLastReader.WaitMode = false;
            }
            FL.Trace(
                "Appending next reader",
                "this=" + Path.GetFileName(currentLastReader.FileName) + "\nNext=" + Path.GetFileName(newReader.FileName) +
                "\nItems read from this=" + currentLastReader.ItemCount);
        }
Esempio n. 15
0
        /// <summary>
        /// Reads the FieldLogWebRequestData data from a log file reader.
        /// </summary>
        /// <param name="reader">Log file reader.</param>
        /// <returns>The web request data.</returns>
        internal static FieldLogWebRequestData Read(FieldLogFileReader reader)
        {
            FieldLogWebRequestData data = new FieldLogWebRequestData();

            data.RequestUrl      = reader.ReadString();
            data.Method          = reader.ReadString();
            data.ClientAddress   = reader.ReadString();
            data.ClientHostName  = reader.ReadString();
            data.Referrer        = reader.ReadString();
            data.UserAgent       = reader.ReadString();
            data.AcceptLanguages = reader.ReadString();
            data.Accept          = reader.ReadString();
            data.WebSessionId    = reader.ReadString();
            data.AppUserId       = reader.ReadString();
            data.AppUserName     = reader.ReadString();

            // Check if the environment is actually empty
            if (string.IsNullOrEmpty(data.RequestUrl))
            {
                return(FieldLogWebRequestData.Empty);
            }

            return(data);
        }
 /// <summary>
 /// Initialises a new instance of the FieldLogFileEnumerator class.
 /// </summary>
 /// <param name="reader">The first file reader instance.</param>
 public FieldLogFileEnumerator(FieldLogFileReader reader)
 {
     this.reader      = reader;
     this.firstReader = reader;
 }
Esempio n. 17
0
 /// <summary>
 /// Reads the log item fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 /// <returns>The read log item.</returns>
 internal static FieldLogExceptionItem Read(FieldLogFileReader reader)
 {
     FieldLogExceptionItem item = new FieldLogExceptionItem();
     item.ReadBaseData(reader);
     item.Exception = FieldLogException.Read(reader);
     item.Context = reader.ReadString();
     item.EnvironmentData = FieldLogEventEnvironment.Read(reader);
     return item;
 }
Esempio n. 18
0
 /// <summary>
 /// Reads a log item from the log file.
 /// </summary>
 /// <param name="reader">Log file reader.</param>
 /// <param name="type">The type of log item to read.</param>
 /// <returns>The read log item.</returns>
 internal static FieldLogItem Read(FieldLogFileReader reader, FieldLogItemType type)
 {
     switch (type)
     {
         case FieldLogItemType.Text:
             return FieldLogTextItem.Read(reader);
         case FieldLogItemType.Data:
             return FieldLogDataItem.Read(reader);
         case FieldLogItemType.Exception:
             return FieldLogExceptionItem.Read(reader);
         case FieldLogItemType.Scope:
         case FieldLogItemType.RepeatedScope:
             return FieldLogScopeItem.Read(reader, type == FieldLogItemType.RepeatedScope);
     }
     throw new ArgumentException("Unsupported log item type (" + (int)type + ")");
 }
Esempio n. 19
0
 /// <summary>
 /// Reads the common log item fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 protected void ReadBaseData(FieldLogFileReader reader)
 {
     LogItemSourceFileName = reader.FileName;
     FileFormatVersion = reader.FormatVersion;
     Time = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
     EventCounter = reader.ReadInt32();
     Priority = (FieldLogPriority)reader.ReadByte();
     SessionId = new Guid(reader.ReadBytes(16));
     ThreadId = reader.ReadInt32();
     if (reader.FormatVersion >= 2)
     {
         WebRequestId = reader.ReadUInt32();
     }
 }
Esempio n. 20
0
        /// <summary>
        /// Reads the log item fields from the specified log file reader.
        /// </summary>
        /// <param name="reader">The log file reader to read from.</param>
        /// <param name="isRepeated">true if the log item is repeated from a previous file, false if it is written for the first time.</param>
        /// <returns>The read log item.</returns>
        internal static FieldLogScopeItem Read(FieldLogFileReader reader, bool isRepeated)
        {
            FieldLogScopeItem item = new FieldLogScopeItem();
            item.ReadBaseData(reader);
            item.IsRepeated = isRepeated;
            item.Type = (FieldLogScopeType)reader.ReadByte();
            item.Level = reader.ReadInt32();
            item.Name = reader.ReadString();

            if (item.Type == FieldLogScopeType.ThreadStart)
            {
                byte flags = reader.ReadByte();
                item.IsBackgroundThread = (flags & 1) != 0;
                item.IsPoolThread = (flags & 2) != 0;
            }
            if (item.Type == FieldLogScopeType.LogStart)
            {
                item.EnvironmentData = FieldLogEventEnvironment.Read(reader);
            }
            if (item.Type == FieldLogScopeType.WebRequestStart && reader.FormatVersion >= 2)
            {
                item.WebRequestData = FieldLogWebRequestData.Read(reader);
            }
            return item;
        }
Esempio n. 21
0
 /// <summary>
 /// Reads the stack frame fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 /// <returns>The stack frame data.</returns>
 internal static FieldLogStackFrame Read(FieldLogFileReader reader)
 {
     FieldLogStackFrame frame = new FieldLogStackFrame();
     frame.Module = reader.ReadString();
     if (reader.FormatVersion >= 2)
     {
         frame.Token = reader.ReadInt32();
         frame.ILOffset = reader.ReadInt32();
     }
     frame.TypeName = reader.ReadString();
     frame.MethodName = reader.ReadString();
     frame.MethodSignature = reader.ReadString();
     frame.FileName = reader.ReadString();
     frame.Line = reader.ReadInt32();
     frame.Column = reader.ReadInt32();
     return frame;
 }
        /// <summary>
        /// Reads the FieldLogEventEnvironment data from a log file reader.
        /// </summary>
        /// <param name="reader">Log file reader.</param>
        /// <returns>The environment data.</returns>
        internal static FieldLogEventEnvironment Read(FieldLogFileReader reader)
        {
            FieldLogEventEnvironment env = new FieldLogEventEnvironment();

            env.OSType             = (OSType)reader.ReadByte();
            env.OSVersion          = (OSVersion)reader.ReadByte();
            env.OSEdition          = (OSEdition)reader.ReadByte();
            env.OSServicePack      = reader.ReadString();
            env.OSBuild            = reader.ReadInt32();
            env.OSServicePackBuild = reader.ReadInt32();
            env.OSProductName      = reader.ReadString();
            env.OSLanguage         = reader.ReadString();
            env.OSLastBootTime     = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
            env.AppCompatLayer     = reader.ReadString();
            env.ClrType            = reader.ReadString();
            env.MouseButtons       = reader.ReadByte();
            env.MaxTouchPoints     = reader.ReadByte();
            env.ScreenDpi          = reader.ReadUInt16();

            env.CultureName          = reader.ReadString();
            env.CurrentDirectory     = reader.ReadString();
            env.EnvironmentVariables = reader.ReadString();
            env.CpuCount             = reader.ReadUInt16();
            env.HostName             = reader.ReadString();
            env.UserName             = reader.ReadString();
            env.ExecutablePath       = reader.ReadString();
            env.CommandLine          = reader.ReadString();
            env.AppVersion           = reader.ReadString();
            if (reader.FormatVersion >= 2)
            {
                env.AppAsmConfiguration = reader.ReadString();
            }
            env.ClrVersion                     = reader.ReadString();
            env.LocalTimeZoneOffset            = TimeSpan.FromMinutes(reader.ReadInt16());
            env.ProcessMemory                  = reader.ReadInt64();
            env.PeakProcessMemory              = reader.ReadInt64();
            env.TotalMemory                    = reader.ReadInt64();
            env.AvailableMemory                = reader.ReadInt64();
            env.ProcessId                      = reader.ReadInt32();
            env.PrimaryScreenWidth             = reader.ReadUInt16();
            env.PrimaryScreenHeight            = reader.ReadUInt16();
            env.PrimaryScreenBitsPerPixel      = reader.ReadByte();
            env.PrimaryScreenWorkingAreaLeft   = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaTop    = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaWidth  = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaHeight = reader.ReadUInt16();
            env.ScreenCount                    = reader.ReadByte();

            byte flags = reader.ReadByte();

            env.OSIs64Bit        = (flags & 1) != 0;
            env.OSIsAppServer    = (flags & 2) != 0;
            env.OSIsFailSafeBoot = (flags & 4) != 0;
            env.IsInteractive    = (flags & 8) != 0;
            env.IsProcess64Bit   = (flags & 16) != 0;
            env.IsAdministrator  = (flags & 32) != 0;

            // Check if the environment is actually empty
            if (env.CpuCount == 0)
            {
                return(FieldLogEventEnvironment.Empty);
            }

            return(env);
        }
        /// <summary>
        /// Reads the FieldLogEventEnvironment data from a log file reader.
        /// </summary>
        /// <param name="reader">Log file reader.</param>
        /// <returns>The environment data.</returns>
        internal static FieldLogEventEnvironment Read(FieldLogFileReader reader)
        {
            FieldLogEventEnvironment env = new FieldLogEventEnvironment();
            env.OSType = (OSType)reader.ReadByte();
            env.OSVersion = (OSVersion)reader.ReadByte();
            env.OSEdition = (OSEdition)reader.ReadByte();
            env.OSServicePack = reader.ReadString();
            env.OSBuild = reader.ReadInt32();
            env.OSServicePackBuild = reader.ReadInt32();
            env.OSProductName = reader.ReadString();
            env.OSLanguage = reader.ReadString();
            env.OSLastBootTime = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
            env.AppCompatLayer = reader.ReadString();
            env.ClrType = reader.ReadString();
            env.MouseButtons = reader.ReadByte();
            env.MaxTouchPoints = reader.ReadByte();
            env.ScreenDpi = reader.ReadUInt16();

            env.CultureName = reader.ReadString();
            env.CurrentDirectory = reader.ReadString();
            env.EnvironmentVariables = reader.ReadString();
            env.CpuCount = reader.ReadUInt16();
            env.HostName = reader.ReadString();
            env.UserName = reader.ReadString();
            env.ExecutablePath = reader.ReadString();
            env.CommandLine = reader.ReadString();
            env.AppVersion = reader.ReadString();
            if (reader.FormatVersion >= 2)
            {
                env.AppAsmConfiguration = reader.ReadString();
            }
            env.ClrVersion = reader.ReadString();
            env.LocalTimeZoneOffset = TimeSpan.FromMinutes(reader.ReadInt16());
            env.ProcessMemory = reader.ReadInt64();
            env.PeakProcessMemory = reader.ReadInt64();
            env.TotalMemory = reader.ReadInt64();
            env.AvailableMemory = reader.ReadInt64();
            env.ProcessId = reader.ReadInt32();
            env.PrimaryScreenWidth = reader.ReadUInt16();
            env.PrimaryScreenHeight = reader.ReadUInt16();
            env.PrimaryScreenBitsPerPixel = reader.ReadByte();
            env.PrimaryScreenWorkingAreaLeft = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaTop = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaWidth = reader.ReadUInt16();
            env.PrimaryScreenWorkingAreaHeight = reader.ReadUInt16();
            env.ScreenCount = reader.ReadByte();

            byte flags = reader.ReadByte();
            env.OSIs64Bit = (flags & 1) != 0;
            env.OSIsAppServer = (flags & 2) != 0;
            env.OSIsFailSafeBoot = (flags & 4) != 0;
            env.IsInteractive = (flags & 8) != 0;
            env.IsProcess64Bit = (flags & 16) != 0;
            env.IsAdministrator = (flags & 32) != 0;

            // Check if the environment is actually empty
            if (env.CpuCount == 0)
                return FieldLogEventEnvironment.Empty;

            return env;
        }
Esempio n. 24
0
 /// <summary>
 /// Reads the exception fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 /// <returns>The exception data.</returns>
 internal static FieldLogException Read(FieldLogFileReader reader)
 {
     FieldLogException ex = new FieldLogException();
     ex.Type = reader.ReadString();
     if (reader.FormatVersion >= 2)
     {
         ex.TypeModule = reader.ReadString();
         ex.Token = reader.ReadInt32();
     }
     ex.Message = reader.ReadString();
     ex.Code = reader.ReadInt32();
     ex.Data = reader.ReadString();
     int frameCount = reader.ReadInt32();
     ex.StackFrames = new FieldLogStackFrame[frameCount];
     for (int i = 0; i < frameCount; i++)
     {
         ex.StackFrames[i] = FieldLogStackFrame.Read(reader);
     }
     int innerCount = reader.ReadInt32();
     ex.InnerExceptions = new FieldLogException[innerCount];
     for (int i = 0; i < innerCount; i++)
     {
         ex.InnerExceptions[i] = FieldLogException.Read(reader);
     }
     return ex;
 }
Esempio n. 25
0
 /// <summary>
 /// Reads the log item fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 /// <returns>The read log item.</returns>
 internal static FieldLogDataItem Read(FieldLogFileReader reader)
 {
     FieldLogDataItem item = new FieldLogDataItem();
     item.ReadBaseData(reader);
     item.Name = reader.ReadString();
     item.Value = reader.ReadString();
     return item;
 }
 /// <summary>
 /// Sets the enumerator to its initial position, which is before the first log item of the
 /// first log file. WARNING: This function is not used yet and may not work as expected.
 /// It is implemented as part of the IEnumerator interface and probably does not work
 /// correctly regarding the WaitMode flag because it is re-reading from used readers.
 /// </summary>
 public void Reset()
 {
     reader = firstReader;
     reader.Reset();
 }
        /// <summary>
        /// Creates a new log file reader and adds it to the priority's log file enumerator.
        /// </summary>
        /// <param name="prio">The priority of files to write.</param>
        /// <param name="fileName">The name of the log file.</param>
        /// <param name="fromFsw">Indicates whether the reader was created from a FileSystemWatcher event.</param>
        private void AddNewReader(FieldLogPriority prio, string fileName, bool fromFsw)
        {
            // Must be within a lock(readerLock)!
            FL.Trace("AddNewReader, prio=" + prio + ", fileName=" + Path.GetFileName(fileName) + ", fromFsw=" + fromFsw);

            // Reject the new file if it's already in the queue (delayed FSW event after active scan)
            if (readers.ContainsKey(prio) &&
                readers[prio] != null &&
                readers[prio].ContainsFile(fileName))
            {
                // This file is already current or queued
                FL.Checkpoint("This file is already current or queued");
                return;
            }

            var reader = new FieldLogFileReader(fileName, true);
            ManualResetEvent h;
            if (!prioReadSignals.TryGetValue(prio, out h))
            {
                h = new ManualResetEvent(false);
                prioReadSignals[prio] = h;
            }
            reader.ReadWaitHandle = h;

            if (!readers.ContainsKey(prio) || readers[prio] == null)
            {
                // This is the first file of this priority
                readers[prio] = new FieldLogFileEnumerator(reader);
                readers[prio].Error += FieldLogFileEnumerator_Error;
                readTasks[(int)prio] = Task<bool>.Factory.StartNew(readers[prio].MoveNext);

                // Signal the blocking ReadLogItem method that there's a new reader now
                newFilePrioEvent.Set();
            }
            else
            {
                // Chain the new reader after the last reader in the queue
                readers[prio].Append(reader, fromFsw);

                // TODO,DEBUG: What for?
                //newFilePrioEvent.Set();
            }
        }
        /// <summary>
        /// Reads the FieldLogWebRequestData data from a log file reader.
        /// </summary>
        /// <param name="reader">Log file reader.</param>
        /// <returns>The web request data.</returns>
        internal static FieldLogWebRequestData Read(FieldLogFileReader reader)
        {
            FieldLogWebRequestData data = new FieldLogWebRequestData();
            data.RequestUrl = reader.ReadString();
            data.Method = reader.ReadString();
            data.ClientAddress = reader.ReadString();
            data.ClientHostName = reader.ReadString();
            data.Referrer = reader.ReadString();
            data.UserAgent = reader.ReadString();
            data.AcceptLanguages = reader.ReadString();
            data.Accept = reader.ReadString();
            data.WebSessionId = reader.ReadString();
            data.AppUserId = reader.ReadString();
            data.AppUserName = reader.ReadString();

            // Check if the environment is actually empty
            if (string.IsNullOrEmpty(data.RequestUrl))
                return FieldLogWebRequestData.Empty;

            return data;
        }
Esempio n. 29
0
 /// <summary>
 /// Reads the log item fields from the specified log file reader.
 /// </summary>
 /// <param name="reader">The log file reader to read from.</param>
 /// <returns>The read log item.</returns>
 internal static FieldLogTextItem Read(FieldLogFileReader reader)
 {
     FieldLogTextItem item = new FieldLogTextItem();
     item.ReadBaseData(reader);
     item.Text = reader.ReadString();
     item.Details = reader.ReadString();
     return item;
 }