Вопрос

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

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

Это было полезно?

Решение

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

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

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

Редактировать:

Подумав об этом на уровне библиотеки (я работаю над отображением библиотеки 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;
  }
}

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

/ЯанусСийм

Другие советы

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

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

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

-assumenosideeffects public class logger.Logger {*;}

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top