Аналог “omit trace” во флекс.

Это оказалось для меня неожиданностью. Во Flash IDE легко убрать все trace из кода: File=>Publish settings=>Omit trace actions. Долгое время я был уверен, что во флексе при экспорте публичной версии Project=>Export release build во флешке выключается и дебаг и трейсы. Как оказалось – это не так. Теперь очевидно так же, что и для FlashDevelop режим "release configuration" не убирает трейсы из кода. И хотя обычный пользователь вряд ли хотя бы имеет приложения для их просмотра, они всё еще влияют на производительность флешки. Опять же это просто некрасиво.

Немного погуглил в поисках решения. Нет, судя по всему, у компилятора flex sdk нет опции аналогичной "omit trace actions". Поэтому решений не много:

Самый простой способ – сделать поиск и замену текста по всему проекту. Всего-то надо заменить "trace" на "//trace".

Так же у флекса есть довольно мощная библиотека для ведения логов mx.logging. Небольшой пример:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
  3. <mx:Script>
  4. <![CDATA[
  5. import mx.logging.Log;
  6. import mx.logging.ILogger;
  7. import mx.logging.LogEventLevel;
  8. import mx.logging.targets.TraceTarget;
  9.  
  10. private var _log:ILogger;
  11. private var _traceTarget:TraceTarget;
  12.  
  13. private function init():void {
  14. _traceTarget = new TraceTarget();
  15. _traceTarget.filters=["*"];
  16. _traceTarget.level = LogEventLevel.ALL;
  17. _traceTarget.includeDate = false;
  18. _traceTarget.includeTime = false;
  19. _traceTarget.includeCategory = true;
  20. _traceTarget.includeLevel = true;
  21. Log.addTarget(_traceTarget);
  22.  
  23. _log = Log.getLogger("ExampleLogger");
  24. _log.info("Your tracing like a pro!");
  25. }
  26. ]]>
  27. </mx:Script>
  28. </mx:Application>
Она позволяет настроить вид лога, указывать для лога его уровень и фильтровать по ним. Но в целом синтаксис довольно громоздок и как замена для trace не катит.

Так же можно использовать условия во время компиляции. В коде пишем так:

  1. CONFIG::debugging {
  2. trace(counter);
  3. }
А в строке компилятора mxmlc добавляем -define=CONFIG::debugging,true или -define=CONFIG::debugging,false в зависимости от того, нужны ли нам трейсы или нет. В Flex builder 3 эту строку можно добавить в Project->Properties->Flex compiler->Additional compiler arguments. Но я нигде не нашел как можно указать отдельную строку для отладочной версии и для публичной версии. Во FlashDevelop удобней. Во вкладке Project=>Properties=>Build нужно просто добавить опции в pre-build command line и post-build command line.

Комментарии

Отправить комментарий

Подробнее о форматировании

Отправляя эту форму, вы соглашаетесь с политикой приватности Mollom.