Поддержка 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. Наслаждаться.
Существует новый проект, который позволяет 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.