/// <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); }
/// <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; }
/// <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; }