2008-09-23 2 views
17

Какие решения для регистрации существуют для j2me?Вход в систему J2ME

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

ответ

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

+0

. Как код будет удален во второй версии? Вы удалили команды предварительной обработки – Casebash 2010-04-16 02:12:32

1

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

19

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

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

+0

MicroLog выглядит очень красиво, но ему нужен CLDC 1.1 – Casebash 2010-04-16 02:12:59

+1

Я нашел библиотеку под названием [J4me] (http://code.google.com/p/j4me/wiki/Logging), которая будет работать на любом устройстве. Microlog выглядит лучше, если вы можете управлять им, хотя – Casebash 2010-04-16 02:32:51

+0

На самом деле, J4me выглядит слишком упрощенным для моих нужд (только на самом деле обеспечивает уровни ведения журнала). Я думаю, что я откажусь от собственного использования с помощью Proguard – Casebash 2010-04-16 02:41:35

3

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

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

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

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

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

7

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

-assumenosideeffects public class logger.Logger {*;} 

Вместо того, чтобы предобработки.

0

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

0

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

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

0

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

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