Пример #1
0
 /*
  * Arrays
  */
 private static void Log <T>(Redwood.RedwoodChannels channels, string description, T[] array)
 {
     Redwood.StartTrack(description);
     if (array == null)
     {
         channels.Log("(array is null)");
     }
     else
     {
         if (array.Length == 0)
         {
             channels.Log("(empty)");
         }
         else
         {
             int index = 0;
             foreach (T item in array)
             {
                 if (Dispatchable(item))
                 {
                     Log(channels, "Index " + index, item);
                 }
                 else
                 {
                     channels.Logf("Index %d: %s", index, item);
                 }
                 index++;
             }
         }
     }
     Redwood.EndTrack(description);
 }
Пример #2
0
 /*
  * Iterables (includes Collection, List, Set, etc.)
  */
 private static void Log <T>(Redwood.RedwoodChannels channels, string description, IEnumerable <T> iterable)
 {
     Redwood.StartTrack(description);
     if (iterable == null)
     {
         channels.Log("(iterable is null)");
     }
     else
     {
         int index = 0;
         foreach (T item in iterable)
         {
             if (Dispatchable(item) && item != iterable)
             {
                 Log(channels, "Index " + index, item);
             }
             else
             {
                 channels.Logf("Index %d: %s", index, item == iterable ? "...<infinite loop>" : item);
             }
             index++;
         }
         if (index == 0)
         {
             channels.Log("(empty)");
         }
     }
     Redwood.EndTrack(description);
 }
Пример #3
0
        // TODO: make prettyLog work in the situation of loops in the object graph
        /// <summary><inheritDoc/></summary>
        public virtual void PrettyLog(Redwood.RedwoodChannels channels, string description)
        {
            Redwood.StartTrack(description);
            // sort keys by class name
            IList <Type> sortedKeys = new List <Type>(this.KeySet());

            sortedKeys.Sort(IComparer.Comparing(null));
            // log key/value pairs
            foreach (Type key in sortedKeys)
            {
                string keyName = key.GetCanonicalName().Replace("class ", string.Empty);
                object value   = this.Get(key);
                if (PrettyLogger.Dispatchable(value))
                {
                    PrettyLogger.Log(channels, keyName, value);
                }
                else
                {
                    channels.Logf("%s = %s", keyName, value);
                }
            }
            Redwood.EndTrack(description);
        }
Пример #4
0
 /*
  * Mappings
  */
 private static void Log <K, V>(Redwood.RedwoodChannels channels, string description, IDictionary <K, V> mapping)
 {
     Redwood.StartTrack(description);
     if (mapping == null)
     {
         channels.Log("(mapping is null)");
     }
     else
     {
         if (mapping.IsEmpty())
         {
             channels.Log("(empty)");
         }
         else
         {
             // convert keys to sorted list, if possible
             IList <K> keys = new LinkedList <K>();
             foreach (K key in mapping.Keys)
             {
                 keys.Add(key);
             }
             keys.Sort(null);
             // log key/value pairs
             int entryCounter = 0;
             foreach (K key_1 in keys)
             {
                 V value = mapping[key_1];
                 if (!Dispatchable(key_1) && Dispatchable(value))
                 {
                     Log(channels, key_1.ToString(), value);
                 }
                 else
                 {
                     if (Dispatchable(key_1) || Dispatchable(value))
                     {
                         Redwood.StartTrack("Entry " + entryCounter);
                         if (Dispatchable(key_1))
                         {
                             Log(channels, "Key", key_1);
                         }
                         else
                         {
                             channels.Logf("Key %s", key_1);
                         }
                         if (Dispatchable(value))
                         {
                             Log(channels, "Value", value);
                         }
                         else
                         {
                             channels.Logf("Value %s", value);
                         }
                         Redwood.EndTrack("Entry " + entryCounter);
                     }
                     else
                     {
                         channels.Logf("%s = %s", key_1, value);
                     }
                 }
                 entryCounter++;
             }
         }
     }
     Redwood.EndTrack(description);
 }