Pull to refresh

Логирование по-быстрому

Reading time2 min
Views1.1K
Потребовалось тут отследить актуальное состояние часто меняющегося элемента. Было подозрение, что его кто то обнуляет. Сразу же отмел варианты с написанием логирования через файловую систему: Сильверлайту не разрешено писать, куда ему захочется. Поэтому был написан небольшой расширяющий метод, который выводит отладочную информацию в консоль браузера.

 public static class Extensions
  {
    public static void Log(this object obj)
    {
      HtmlWindow window = HtmlPage.Window;
      object isConsoleAvailable =
         window.Eval("typeof(console) != 'undefined' && typeof(console.log) != 'undefined'");

      if ( (isConsoleAvailable is bool) && (bool)isConsoleAvailable)
      {
        var console = (window.Eval("console.log") as ScriptObject);
        if (console != null)
        {
          console.InvokeSelf(obj);
        }
      }
    }
  }


* This source code was highlighted with Source Code Highlighter.


Вызывается очень просто: на объекте нужно просто вызвать метод Log().
Я обычно подготавливаю строку и логирую ее.

string message = string.Format("{0}: object {1} ScrollPosition = {2}",DateTime.Now.ToShortTimeString(),((ItemsControl)d).Name,e.NewValue.ToString());
      message.Log();


* This source code was highlighted with Source Code Highlighter.


Вот так это выглядит в FireFox (для просмотра нужен FireBug):


а вот так в IE8 (нужно только нажать F12 и перейти на вкладку Сценарий):


Этот метод подойдет, если вам нужно при дебаге посмотреть что-нибудь в проекте. Для долговременного логирования лучше конечно использовать Clog. Вот только он не поддерживает Silverlight 3.

Tags:
Hubs:
Total votes 2: ↑2 and ↓0+2
Comments2

Articles