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 com.jme3.util.AndroidLogHandler;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.util.logging.Handler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.LogManager;
|
import java.util.logging.LogManager;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -65,7 +66,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected boolean eglConfigVerboseLogging = false;
|
protected boolean eglConfigVerboseLogging = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set to 2, 4 to enable multisampling.
|
* set to 2, 4 to enable multisampling.
|
||||||
*/
|
*/
|
||||||
@ -160,7 +161,8 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
LogManager.getLogManager().getLogger("").addHandler(new AndroidLogHandler());
|
initializeLogHandler();
|
||||||
|
|
||||||
logger.fine("onCreate");
|
logger.fine("onCreate");
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
@ -198,7 +200,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|||||||
settings.setSamples(antiAliasingSamples);
|
settings.setSamples(antiAliasingSamples);
|
||||||
settings.setResolution(disp.getWidth(), disp.getHeight());
|
settings.setResolution(disp.getWidth(), disp.getHeight());
|
||||||
settings.put(AndroidConfigChooser.SETTINGS_CONFIG_TYPE, eglConfigType);
|
settings.put(AndroidConfigChooser.SETTINGS_CONFIG_TYPE, eglConfigType);
|
||||||
|
|
||||||
|
|
||||||
// Create application instance
|
// Create application instance
|
||||||
try {
|
try {
|
||||||
@ -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() {
|
public void initialize() {
|
||||||
app.initialize();
|
app.initialize();
|
||||||
if (handleExitHook) {
|
if (handleExitHook) {
|
||||||
|
@ -115,34 +115,7 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initialized = true;
|
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());
|
logger.log(Level.INFO, "Running on {0}", getFullName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,22 +15,31 @@ import java.util.logging.Logger;
|
|||||||
*/
|
*/
|
||||||
public class AndroidLogHandler extends Handler {
|
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
|
@Override
|
||||||
public String format(LogRecord r) {
|
public String format(LogRecord record) {
|
||||||
Throwable thrown = r.getThrown();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (thrown != null) {
|
|
||||||
StringWriter sw = new StringWriter();
|
sb.append(record.getLevel().getLocalizedName()).append(" ");
|
||||||
PrintWriter pw = new PrintWriter(sw);
|
sb.append(formatMessage(record)).append(lineSeperator);
|
||||||
sw.write(r.getMessage());
|
|
||||||
sw.write("\n");
|
if (record.getThrown() != null) {
|
||||||
thrown.printStackTrace(pw);
|
try {
|
||||||
pw.flush();
|
StringWriter sw = new StringWriter();
|
||||||
return sw.toString();
|
PrintWriter pw = new PrintWriter(sw);
|
||||||
} else {
|
record.getThrown().printStackTrace(pw);
|
||||||
return r.getMessage();
|
pw.close();
|
||||||
|
sb.append(sw.toString());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -44,14 +53,13 @@ public class AndroidLogHandler extends Handler {
|
|||||||
@Override
|
@Override
|
||||||
public void publish(LogRecord record) {
|
public void publish(LogRecord record) {
|
||||||
|
|
||||||
|
int level = getAndroidLevel(record.getLevel());
|
||||||
|
// String tag = loggerNameToTag(record.getLoggerName());
|
||||||
|
String tag = record.getLoggerName();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Level level = record.getLevel();
|
String message = JME_FORMATTER.format(record);
|
||||||
String tag = record.getLoggerName();
|
Log.println(level, tag, message);
|
||||||
String msg = THE_FORMATTER.format(record);
|
|
||||||
int lv = getAndroidLevel(level);
|
|
||||||
|
|
||||||
Log.println(lv, tag, msg);
|
|
||||||
|
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
Log.e("AndroidHandler", "Error logging message.", e);
|
Log.e("AndroidHandler", "Error logging message.", e);
|
||||||
}
|
}
|
||||||
@ -77,4 +85,26 @@ public class AndroidLogHandler extends Handler {
|
|||||||
return Log.DEBUG;
|
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