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

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

Ответ 1

На самом деле использование slf4j оказалось для меня очень безболезненным процессом, и, похоже, это обычный случай, по крайней мере для библиотек, которые используют простые функции log4j. Вам не нужно обменивать slf4j in для 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, используемые типичными реализациями, и связывает их с реализацией Android slf4j. После добавления библиотек код работает.

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Существует новый проект, который позволяет 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 с помощью API log4j

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");
    }
}

Ответ 5

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

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. Чтобы сделать работу бензопилы, нажмите второй флажок в появившемся диалоговом окне, нажмите "ОК", запустите приложение, и появится новая вкладка. Помните, что ваш брандмауэр может заблокировать его...