Вход в J2ME - PullRequest
       59

Вход в J2ME

17 голосов
/ 23 сентября 2008

Какие решения для ведения журналов существуют для j2me?

Я особенно заинтересован в том, чтобы легко исключить ведение журнала для «релизной» версии, чтобы иметь меньший объем пакета и объем памяти.

Ответы [ 8 ]

19 голосов
/ 23 сентября 2008

MicroLog уверен, что ставка. Это небольшая библиотека журналов для Java ME (J2ME), такая как Log4j. Он поддерживает запись в консоль, файл, RecordStore, Canvas, Form, Bluetooth, последовательный порт (Bluetooth, IR, USB), сокет (включая SSL), UDP, Syslog, MMS, SMS, электронную почту или в Amazon S3. .

http://sourceforge.net/projects/microlog/

12 голосов
/ 23 сентября 2008

Если вы используете предварительную обработку и запутывание с Proguard, то у вас может быть простой класс ведения журнала.

public class Log {
  public static void debug(final String message) {
    //#if !release.build
    System.out.println(message);
    //#endif
  }
}

Или зайдите туда, где вам нужно. Теперь, если свойство release.build установлено в true, этот код будет закомментирован, что приведет к пустому методу. Proguard удалит все случаи использования пустого метода - в результате при сборке выпуска будут удалены все сообщения отладки.

Edit:

Думая об этом на уровне библиотеки (я работаю над отображением библиотеки J2ME), я, вероятно, нашел лучшее решение.

public class Log {
  private static boolean showDebug;

  public static void debug(final String message) {
    if (showDebug) {
      System.out.println(message);
    }
  }

  public static void setShowDebug(final boolean show) {
    showDebug = show;
  }
}

Таким образом, конечный разработчик может включить уровни журнала в интересующей его библиотеке. Если ничего не будет включено, весь код регистрации будет удален при запутывании конечного продукта. Sweet:)

/ JaanusSiim

7 голосов
/ 03 октября 2008

Вы можете использовать -assumenosideaffects в proguard, чтобы полностью удалить класс ведения журнала:

-assumenosideeffects public class logger.Logger {*;}

Вместо предварительной обработки.

3 голосов
/ 24 сентября 2008

Телефоны Series60 и UIQ с виртуальной машиной Sun, модифицированной самой Symbian, имеют перенаправление стандартного вывода.

Вы можете не только захватить System.out, но и Throwable.printStackTrace ().

На ранних телефонах вам нужно написать приложение на C ++, которое подключается к стандартному процессу библиотечного сервера. Symbian создал приложение Redirector, которое может записывать стандартный вывод виртуальной машины в консоль или файл.

На более новых телефонах был введен протокол GCF "redirect: //", который может считывать стандартный вывод VM в объект Java byte [] или String (вы могли бы сделать это в отдельном мидлете) и приложение Redirector. был переписан на Java.

На новейшей виртуальной машине J9, используемой в мобильных телефонах Series60 3rd Edition Feature Pack 2 (и более поздних версиях), вам может потребоваться вместо этого попробовать «redirect: // test».

1 голос
/ 23 сентября 2008

Я использовал MIDPLogger до некоторого приемлемого уровня в производственном приложении, хотя я обнаружил, что он более полезен после интеграции в приложение, а не как другой мидлет в комплекте или тому подобное. Я также нашел MicroLog , но не использовал его до мельчайших деталей.

0 голосов
/ 09 апреля 2012

Платформа LWUIT J2ME предоставляет форму ведения журнала, в которой может быть записан оператор. Вы можете добавить журнал в любое место, которое, по вашему мнению, может генерировать исключение.

Пример: Log.getInstance (). ShowLog (); Добавив вышеприведенную строку, вы сможете отслеживать регистрацию на устройствах J2ME.

0 голосов
/ 08 ноября 2008

Использование условной компиляции класса logger не решает проблему полного удаления операторов ведения журнала, потому что вы часто будете регистрировать больше, чем простую строку. Вы будете искать значения переменных и затем собирать их в строки, например: WhwhatLog.log ("Loaded" + someclass.size () + "foos").

Теперь, если вы пропустите только тело WhwhatLog.log (как показано в принятом решении), вы все равно оставите много ненужного кода, включая конкатенацию строк (и, следовательно, создание StringBuffer). Вот почему вам лучше использовать инструмент постобработки байт-кода, такой как proguard (уже упоминалось). Proguard -assumenosideeffects позволит оптимизатору удалять не только операторы журналирования, но и весь код, результаты которого будут использоваться только вызовом журналирования.

0 голосов
/ 14 октября 2008

Я написал оптимизатор байт-кода, и из-за формата файлов классов вы можете указать кодировку UTF для имени класса и функции, которая позволяет выводить журналы с помощью MyClass.someFunc () (вы можете обработать подпись, если хотите получить типы), что позволяет делать что-то вроде отладки в стиле C с использованием макросов LINE & FILE .

...