Файл журнала Blackberry - PullRequest
       3

Файл журнала Blackberry

0 голосов
/ 10 апреля 2011

Есть ли способ создания файла журнала с помощью API Blackberry?

Что-то вроде log4j?

Я хотел бы сохранить этот файл журнала на компьютере с эмулятором, возможно ли это?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2011

В Antair при разработке наших приложений BlackBerry мы часто включаем консоль отладки в сборки для наших приложений.

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

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

Пользоваться консолью легко. Включите код в ваш проект, заполните PERSISTENCE_GUID для вашего приложения, задайте строку TAGID , чтобы указать имя вашего приложения в журналах отладки и когда вы хотите вывести оператор отладки просто позвоните Debug.print («Здесь что-то произошло…»);

Каждая строка вывода отладки, как в окне вывода при запуске в симуляторе, так и на экране консоли отладки при просмотре на устройстве, будет содержать ваше сообщение отладки, номер потока, по которому был сделан вызов (полезно для отладки потока / пользовательского интерфейса) и дата / время оператора журнала с миллисекундной отметкой времени для профилирования производительности.

Чтобы просмотреть консоль отладки на реальном устройстве, просто вызовите pushScreen (новый AntairLogScreen ()) . На экране есть встроенный пункт меню для очистки сохраненных сообщений журнала, и он будет отображаться как обычный экран приложения.

Если вы используете препроцессор RIM для переключения между разработкой, QA и производственными сборками, вы можете просто вызвать вызов для установки Debug.ENABLED = false для всего, кроме сборок разработки, и консоль отладки будет там, когда вам нужно отладить и тихо уйти, когда она вам не нужна.

Код ниже.

// ---------------------------------------------------------------------------
// Antair Debug Log (for the BlackBerry API)
// http://www.antair.com
// ---------------------------------------------------------------------------

package com.antair.examples.debug;

import net.rim.device.api.i18n.SimpleDateFormat;
import java.util.Date;
import net.rim.device.api.collection.util.BigVector;
import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.util.Persistable;

final class Debug implements Persistable
{
    final static boolean ENABLED = true;
    final static String TAGID = "MY_PROJECT";
    final static long PERSISTENCE_GUID = /* YOUR OWN PERSISTENCE GUID */;

    private BigVector _messages = new BigVector();

    static String print(String str)
    {
        if ( Debug.ENABLED )
        {
            StringBuffer sb = new StringBuffer();
            sb.append(TAGID);
            sb.append("\n");
            sb.append(Thread.currentThread().toString());
            sb.append("\n");
            sb.append(new SimpleDateFormat("MM/dd/yy HH:mm:ss:SSS").format(
                new Date()));
            sb.append("\n");
            sb.append(str); sb.append("\n");
            str = sb.toString();

            System.out.println(str);
            System.out.flush();

            Debug d = load();
            d._messages.addElement(str);
            save(d);
        }

        return str;
    }

    static BigVector getPersistedMessages()
    {
        return load()._messages;
    }

    static void clearPersistedMessages()
    {
        save(new Debug());
    }

    private static Debug load()
    {
        Debug d = null;

        try
        {
            PersistentObject po =     
                PersistentStore.getPersistentObject(Debug.PERSISTENCE_GUID);

            synchronized(po)
            {
                Object obj = po.getContents();
                d = (obj == null) ? new Debug() : (Debug)obj;
            }
        }

        catch ( Exception e )
        {
            d = new Debug();
        }

        return d;
    }

    private static void save(Debug d)
    {
        try
        {
            PersistentObject po = 
              PersistentStore.getPersistentObject(Debug.PERSISTENCE_GUID);

            synchronized(po)
            {
                po.setContents(d);
                po.commit();
            }
        }
        catch ( Exception e )
        {
        }
    }
}

final class ClearAntairLogScreenMenuItem extends MenuItem
{
    ClearAntairLogScreenMenuItem(int position)
    {
        super("Clear Log", position, 0);
    }

    public void run()
    {
        Debug.clearPersistedMessages();
    }
}

final class AntairLogScreen extends MainScreen
{
    AntairLogScreen()
    {
        super(MainScreen.DEFAULT_CLOSE|MainScreen.DEFAULT_MENU);

        StringBuffer text = new StringBuffer();

        BigVector logItems = Debug.getPersistedMessages();

        for ( int i = 0 ; i < logItems.size() ; ++i )
        {
            text.append((String)logItems.elementAt(i) + "\n");
        }

        add(new RichTextField(text.toString()));
    }

    protected void makeMenu ( Menu menu, int instance )
    {
        menu.add(new ClearAntairLogScreenMenuItem(100000));
    }
}
3 голосов
/ 10 апреля 2011

У BlackBerry есть свой собственный журнал - EventLogger , но я нахожу это уродливым. Вы можете писать в EventLogger, но вы не можете просматривать его так же легко, как в других журналах или, например, вы не можете извлечь содержимое программным путем для отправки по http / электронной почте.

Я думаю, что гораздо удобнее использовать ваш собственный класс регистратора, который записывает записи журнала непосредственно в файл журнала на SD-карте. Поскольку SD-карта на эмуляторе является папкой на вашем компьютере, вы можете легко отслеживать приложение с помощью любого средства просмотра журналов ПК в режиме реального времени.

Также в качестве бонуса при таком подходе у вас может быть код для отправки журнала по http / email. Такое ведение журнала на реальном устройстве значительно замедлит работу приложения, поэтому его не следует нормально использовать в производственной среде, но в вашем приложении может быть такая опция (для включения отладки mose), что позволит узнать причину, которая в противном случае останется неизвестно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...