Fix issue with how Android logging is handled.
- Replaced standard Android logging Handler to avoid Android issue with only logging Level.INFO -> Level.SEVERE log records. - Moved logging Handler initialization to AndroidHarness instead of in JmeSystem so logging in AndroidHarness and app startup could be logged. git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10485 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
2015d5b956
commit
a53c052f74
@ -31,6 +31,7 @@ import com.jme3.system.android.OGLESContext;
|
||||
import com.jme3.util.AndroidLogHandler;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
@ -160,7 +161,8 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
LogManager.getLogManager().getLogger("").addHandler(new AndroidLogHandler());
|
||||
initializeLogHandler();
|
||||
|
||||
logger.fine("onCreate");
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
@ -473,6 +475,24 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the standard Android log handler due to an issue with not logging
|
||||
* entries lower than INFO level and adds a handler that produces
|
||||
* JME formatted log messages.
|
||||
*/
|
||||
protected void initializeLogHandler() {
|
||||
Logger log = LogManager.getLogManager().getLogger("");
|
||||
for (Handler handler : log.getHandlers()) {
|
||||
if (log.getLevel() != null && log.getLevel().intValue() <= Level.FINE.intValue()) {
|
||||
Log.v("AndroidHarness", "Removing Handler class: " + handler.getClass().getName());
|
||||
}
|
||||
log.removeHandler(handler);
|
||||
}
|
||||
Handler handler = new AndroidLogHandler();
|
||||
log.addHandler(handler);
|
||||
handler.setLevel(Level.ALL);
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
app.initialize();
|
||||
if (handleExitHook) {
|
||||
|
@ -115,34 +115,7 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
try {
|
||||
// JmeFormatter formatter = new JmeFormatter();
|
||||
// Handler consoleHandler = new AndroidLogHandler();
|
||||
// consoleHandler.setFormatter(formatter);
|
||||
//
|
||||
// Logger log = Logger.getLogger("");
|
||||
// for (Handler h : log.getHandlers()) {
|
||||
// log.removeHandler(h);
|
||||
// }
|
||||
// log.addHandler(consoleHandler);
|
||||
Logger log = Logger.getLogger(JmeAndroidSystem.class.getName());
|
||||
boolean bIsLogFormatSet = false;
|
||||
do {
|
||||
log.setLevel(Level.ALL);
|
||||
if (log.getHandlers().length == 0) {
|
||||
log = log.getParent();
|
||||
if (log != null) {
|
||||
for (Handler h : log.getHandlers()) {
|
||||
h.setFormatter(new JmeFormatter());
|
||||
h.setLevel(Level.ALL);
|
||||
bIsLogFormatSet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (log != null && !bIsLogFormatSet);
|
||||
} catch (SecurityException ex) {
|
||||
logger.log(Level.SEVERE, "Security error in creating log file", ex);
|
||||
}
|
||||
|
||||
logger.log(Level.INFO, "Running on {0}", getFullName());
|
||||
}
|
||||
|
||||
|
@ -15,22 +15,31 @@ import java.util.logging.Logger;
|
||||
*/
|
||||
public class AndroidLogHandler extends Handler {
|
||||
|
||||
private static final Formatter THE_FORMATTER = new Formatter() {
|
||||
private static final Formatter JME_FORMATTER = new JmeFormatter() {
|
||||
|
||||
String lineSeperator = System.getProperty("line.separator");
|
||||
|
||||
@Override
|
||||
public String format(LogRecord r) {
|
||||
Throwable thrown = r.getThrown();
|
||||
if (thrown != null) {
|
||||
public String format(LogRecord record) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append(record.getLevel().getLocalizedName()).append(" ");
|
||||
sb.append(formatMessage(record)).append(lineSeperator);
|
||||
|
||||
if (record.getThrown() != null) {
|
||||
try {
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
sw.write(r.getMessage());
|
||||
sw.write("\n");
|
||||
thrown.printStackTrace(pw);
|
||||
pw.flush();
|
||||
return sw.toString();
|
||||
} else {
|
||||
return r.getMessage();
|
||||
record.getThrown().printStackTrace(pw);
|
||||
pw.close();
|
||||
sb.append(sw.toString());
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@Override
|
||||
@ -44,14 +53,13 @@ public class AndroidLogHandler extends Handler {
|
||||
@Override
|
||||
public void publish(LogRecord record) {
|
||||
|
||||
try {
|
||||
Level level = record.getLevel();
|
||||
int level = getAndroidLevel(record.getLevel());
|
||||
// String tag = loggerNameToTag(record.getLoggerName());
|
||||
String tag = record.getLoggerName();
|
||||
String msg = THE_FORMATTER.format(record);
|
||||
int lv = getAndroidLevel(level);
|
||||
|
||||
Log.println(lv, tag, msg);
|
||||
|
||||
try {
|
||||
String message = JME_FORMATTER.format(record);
|
||||
Log.println(level, tag, message);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e("AndroidHandler", "Error logging message.", e);
|
||||
}
|
||||
@ -77,4 +85,26 @@ public class AndroidLogHandler extends Handler {
|
||||
return Log.DEBUG;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the short logger tag for the given logger name.
|
||||
* Traditionally loggers are named by fully-qualified Java classes; this
|
||||
* method attempts to return a concise identifying part of such names.
|
||||
*/
|
||||
public static String loggerNameToTag(String loggerName) {
|
||||
// Anonymous logger.
|
||||
if (loggerName == null) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
int length = loggerName.length();
|
||||
int lastPeriod = loggerName.lastIndexOf(".");
|
||||
|
||||
if (lastPeriod == -1) {
|
||||
return loggerName;
|
||||
}
|
||||
|
||||
return loggerName.substring(lastPeriod + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user