File: src\Framework\MS\Internal\Utility\TraceLog.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
// <copyright file="TraceLog.cs" company="Microsoft">
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// Description: Log of recent actions.  Use this to debug those nasty problems
// that don't repro on demand and don't have enough information in a crash
// dump.
//  In the class(es) of interest, add a TraceLog object.  At points of
//  interest, call TraceLog.Add to record a string in the log.  After the
//  crash, call TraceLog.WriteLog (or simply examine the log directly in
//  the debugger).  Log entries are timestamped.
using System;
using System.Collections;
using System.Globalization;
namespace MS.Internal.Utility
    internal class TraceLog
        // create an unbounded trace log
        internal TraceLog() : this(Int32.MaxValue) {}
        // create a trace log that remembers the last 'size' actions
        internal TraceLog(int size)
            _size = size;
            _log = new ArrayList();
        // add an entry to the log.  Args are just like String.Format
        internal void Add(string message, params object[] args)
            // create timestamped message string
            string s = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture)
                        + " "
                        + String.Format(CultureInfo.InvariantCulture, message, args);
            // if log is full, discard the oldest message
            if (_log.Count == _size)
            // add the new message
        // write the log to the console
        internal void WriteLog()
            for (int k=0; k<_log.Count; ++k)
        // return a printable id for the object
        internal static string IdFor(object o)
            if (o == null)
                return "NULL";
                return String.Format(CultureInfo.InvariantCulture, "{0}.{1}",
                        o.GetType().Name, o.GetHashCode());
        ArrayList _log;
        int _size;