Ответ 1
Это теперь FAQ для одного из моих проектов, надеюсь, что больше людей найдут это здесь: java.util.logging отлично работает на Android. Пожалуйста, не используйте что-либо еще в своем коде, фреймворки регистрации как вредитель в мире Java.
Что нарушено, это обработчик регистрации по умолчанию, поставляемый с Android, он игнорирует любые сообщения журнала с уровнем более тонким, чем INFO. Вы не видите сообщения DEBUG и т.д.
Причиной является вызов Log.isLoggable() в AndroidHandler.java:
Вот как вы его исправите:
import android.util.Log;
import java.util.logging.*;
/**
* Make JUL work on Android.
*/
public class AndroidLoggingHandler extends Handler {
public static void reset(Handler rootHandler) {
Logger rootLogger = LogManager.getLogManager().getLogger("");
Handler[] handlers = rootLogger.getHandlers();
for (Handler handler : handlers) {
rootLogger.removeHandler(handler);
}
rootLogger.addHandler(rootHandler);
}
@Override
public void close() {
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
if (!super.isLoggable(record))
return;
String name = record.getLoggerName();
int maxLength = 30;
String tag = name.length() > maxLength ? name.substring(name.length() - maxLength) : name;
try {
int level = getAndroidLevel(record.getLevel());
Log.println(level, tag, record.getMessage());
if (record.getThrown() != null) {
Log.println(level, tag, Log.getStackTraceString(record.getThrown()));
}
} catch (RuntimeException e) {
Log.e("AndroidLoggingHandler", "Error logging message.", e);
}
}
static int getAndroidLevel(Level level) {
int value = level.intValue();
if (value >= 1000) {
return Log.ERROR;
} else if (value >= 900) {
return Log.WARN;
} else if (value >= 800) {
return Log.INFO;
} else {
return Log.DEBUG;
}
}
}
В основном коде активности/инициализации вашего приложения:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidLoggingHandler.reset(new AndroidLoggingHandler());
java.util.logging.Logger.getLogger("my.category").setLevel(Level.FINEST);
...
TL; DR: Да, вы можете использовать некоторые магические свойства или команду оболочки adb или даже узнать, как глупый встроенный обработчик ведения журнала DalvikLogging.loggerNameToTag
преобразует имена категорий в теги (которые вы нужно было бы сделать для этих магических свойств и команд оболочки), но зачем беспокоиться? Достаточно ли достаточно регистрации?