Поддержка log4j в Android

Я пытаюсь вставить существующий SDK на устройство Android, и одна из зависимостей указанного SDK - Apache log4j. Я могу загрузить свою тестовую программу на эмулятор Android, но когда вызывается объект "PropertySetter" log4j, программа завершается с ошибкой проверки. Есть ли способ улучшить эту проблему?

6 ответов

На самом деле использование slf4j оказалось для меня удивительно безболезненным процессом, и это, кажется, распространенный случай, по крайней мере, для библиотек, которые используют простые функции log4j. На самом деле вам не нужно менять slf4j на log4j, просто добавьте две библиотеки slf4j в ваш проект с http://www.slf4j.org/download.html:

- библиотека slf4j для Android (в настоящее время slf4j-android-1.6.1-RC1.jar)
- log4j через slf4j ( http://www.slf4j.org/legacy.html) мост.

Последний определяет основные классы log4j, используемые типичными реализациями, и связывает их с реализацией Android slf4j. Как только библиотеки добавлены, код работает.

Я успешно запустил log4j на Android с помощью Socket Appender и Log4j Chainsaw. Весь код находится в этом хранилище. Slf4j настроен и работает тоже. Имейте в виду, что вы должны настроить это программно. Вы не можете использовать.properties или.xml файлы, которые парсер не будет работать на Android. Наслаждаться.

https://sourceforge.net/projects/log4j-android/

Существует новый проект, который позволяет log4j на Android. Также возможно использование log4j поверх slf4j. Он также предоставляет приложение для LogCat. См. Вход в Android с использованием Log4J.

В следующем примере показано, как настроить и использовать log4j в Android.

Настройте систему log4j в Android

import org.apache.log4j.Level;
import android.os.Environment;
import de.mindpipe.android.logging.log4j.LogConfigurator;
/**
 * Simply place a class like this in your Android applications classpath.
 */
public class ConfigureLog4J {
    static {
        final LogConfigurator logConfigurator = new LogConfigurator();

        logConfigurator.setFileName(Environment.getExternalStorageDirectory() + "myapp.log");
        logConfigurator.setRootLevel(Level.DEBUG);
        // Set log level of a specific logger
        logConfigurator.setLevel("org.apache", Level.ERROR);
        logConfigurator.configure();
    }
}

Вход в Android с использованием log4j с использованием API slf4j

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ExampleLog4JOverSLF4J {
    private final Logger log = LoggerFactory.getLogger(ExampleLog4JOverSLF4J.class);

    public void myMethod() {
        log.info("This message should be seen in log file and logcat");
    }
}

Вход в Android с использованием log4j API

import org.apache.log4j.Logger;

public class ExampleLog4J {
    private final Logger log = Logger.getLogger(LogConfiguratorTest.class);

    public void myMethod() {
        log.info("This message should be seen in log file and logcat");
    }
}

Проверьте этот проект для полной реализации: http://code.google.com/p/log4j-android/

Анализатор для файлов конфигурации log4j не является android safe.slf4j для Android совместимость с log4j просто переопределяет классы log4j, которые вы будете использовать, и заставляет их использовать журналирование в стиле android logcat. Вы все еще не получаете полную гибкость log4j на Android. Я портировал log4j на android в моем проекте https://sourceforge.net/projects/log4j-android/ все что вам нужно сделать, это добавить два jar-файла из каталога binaries к вашему classpath. затем

static {
    org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger();

    final SocketAppender appender = new SocketAppender("192.168.1.4", 4445);


    root.addAppender(appender);
}

private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MyClass.class);

static {
    logger.info("Hello logger");
}

Это начнет отправлять сообщения на указанный вами удаленный хост. Вы можете увидеть это сообщение с помощью Chainsaw http://logging.apache.org/log4j/docs/webstart/chainsaw/chainsawWebStart.jnlp. Чтобы заставить работать бензопилу, установите второй флажок в появившемся диалоговом окне и нажмите "ОК", запустите приложение, и должна появиться новая вкладка. Имейте в виду, что ваш брандмауэр может заблокировать его...

Я бы порекомендовал попробовать поменять местами в slf4j вместо log4j. Это не безболезненное переключение, но, вероятно, будет легче, чем то, что у вас есть. slf4j предоставляет общий интерфейс для нескольких регистраторов, включая log4j, и есть пакет slf4j-android.

Нет, механизм регистрации Android не приличный. Это очень неадекватно по сравнению с тем, что может сделать для вас log4j.

Другие вопросы по тегам