поддержка log4j в Android - PullRequest
       56

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

14 голосов
/ 26 мая 2010

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

Ответы [ 6 ]

13 голосов
/ 02 ноября 2010

На самом деле использование 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-over-slf4j) мост.

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

4 голосов
/ 20 ноября 2011

Существует новый проект, который включает 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");
    }
}
4 голосов
/ 17 марта 2011

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

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

2 голосов
/ 27 декабря 2012

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

2 голосов
/ 18 марта 2011

Анализатор для файлов конфигурации 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");
}

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

2 голосов
/ 07 августа 2010

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

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

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