Подтвердить что ты не робот

Вход в J2ME

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

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

4b9b3361

Ответ 1

Если вы используете предварительную обработку и обфускацию с помощью 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;
  }
}

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

/JaanusSiim

Ответ 2

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

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

Ответ 3

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

-assumenosideeffects public class logger.Logger {*;}

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

Ответ 4

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

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

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

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

В новейшей J9 VM, используемой в телефонах Series60 3rd Edition Feature Pack 2 (и позже), вам может потребоваться вместо этого попробовать "перенаправить://тест".

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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