Вход в J2ME

17

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

Меня особенно интересует легко исключение регистрации для версии «release», чтобы иметь меньший пакет & amp; память.     

задан Asaf R 23.09.2008 в 14:21
источник

8 ответов

12

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

    
ответ дан JaanusSiim 23.09.2008 в 15:42
источник
19

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

Ссылка

    
ответ дан darius 23.09.2008 в 15:18
источник
7

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

-assumenosideeffects public class logger.Logger {*;}

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

    
ответ дан edsumner 03.10.2008 в 11:59
источник
3

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

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

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

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

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

    
ответ дан michael aubert 24.09.2008 в 14:07
источник
1

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

    
ответ дан Scott Bennett-McLeish 23.09.2008 в 14:48
источник
0

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

    
ответ дан user26228 14.10.2008 в 20:27
источник
0

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

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

    
ответ дан Otm Shank 08.11.2008 в 15:31
источник
0

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

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

    
ответ дан Megha 09.04.2012 в 08:04
источник