Exemple #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>
        /// <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);
        }
Exemple #2
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 + ")");
        }
        private static void ThreadProc()
        {
#if NET20
            localOffset = (int)TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.UtcNow).TotalMinutes;
#else
            localOffset = (int)TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow).TotalMinutes;
#endif
            // Only check for offset changes every new minute (plus 1 second safety margin) to save
            // resources for clearing the TimeZoneInfo cache
            nextOffsetCheck = DateTime.UtcNow.Ticks / 600000000 * 600000000 + 610000000;

            do
            {
                try
                {
                    Thread.Sleep(CheckInterval);
                }
                catch (ThreadInterruptedException)
                {
                    // That's fine.
                }

                // Check for UTC time changes
                TimeSpan offset = DateTime.UtcNow - FL.UtcNow;
                if (Math.Abs(offset.TotalMilliseconds) >= FL.CheckTimeThreshold)
                {
                    FL.RebaseTime();

                    string msg  = "System time changed by " + offset.TotalMilliseconds.ToString("0.0", CultureInfo.InvariantCulture) + " ms";
                    var    item = new FieldLogTextItem(FieldLogPriority.Notice, msg, "Changes less than " + FL.CheckTimeThreshold + " ms are not reported.");
                    // Discard this log item if there was no other item logged within the last
                    // 10 seconds because it wouldn't be interesting anyway. If no other log items
                    // may have discontinuous timestamps, the time recalibration can occur silently.
                    FL.LogInternal(item, TimeSpan.FromSeconds(10));
                    Debug.WriteLine(msg);
                    prevLoggedOffset = 0;
                }
                else if (FL.LogTimeThreshold >= 0 &&
                         Math.Abs(offset.TotalMilliseconds - prevLoggedOffset) > FL.LogTimeThreshold)
                {
                    FL.TraceData("System time offset", offset.TotalMilliseconds);
                    prevLoggedOffset = offset.TotalMilliseconds;
                }

                // Check for local time zone changes
                if (DateTime.UtcNow.Ticks >= nextOffsetCheck)
                {
                    // Clear the cache to get the real current setting
#if NET20
                    int newLocalOffset = (int)TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.UtcNow).TotalMinutes;
#else
                    TimeZoneInfo.ClearCachedData();
                    int newLocalOffset = (int)TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow).TotalMinutes;
#endif
                    if (newLocalOffset != localOffset)
                    {
                        int hours = localOffset / 60;
                        int mins  = Math.Abs(localOffset) % 60;

                        int newHours = newLocalOffset / 60;
                        int newMins  = Math.Abs(newLocalOffset) % 60;

                        localOffset = newLocalOffset;

                        string msg = "Local time UTC offset changed from " +
                                     hours.ToString("+00;-00;+00") + ":" + mins.ToString("00") + " to " +
                                     newHours.ToString("+00;-00;+00") + ":" + newMins.ToString("00");
                        string details = "\u0001UtcOffset=" + newLocalOffset;
                        FL.Notice(msg, details);
                        Debug.WriteLine(msg);
                    }
                    nextOffsetCheck = DateTime.UtcNow.Ticks / 600000000 * 600000000 + 610000000;
                }
            }while (!cancelPending);
        }
 public FieldLogTextItemViewModel(FieldLogTextItem item)
 {
     this.Item = item;
     base.Item = item;
 }
Exemple #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 FieldLogTextItem Read(FieldLogFileReader reader)
 {
     FieldLogTextItem item = new FieldLogTextItem();
     item.ReadBaseData(reader);
     item.Text = reader.ReadString();
     item.Details = reader.ReadString();
     return item;
 }