• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Main repository of MikuMikuStudio


Commit MetaInfo

Revision0e64a42cacf90ff5f3fab4bd1923950df375d67a (tree)
Time2013-03-15 10:28:07
Authoriwgeric@gmail.com <iwgeric@gmai...>
Commiteriwgeric@gmail.com

Log Message

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: http://jmonkeyengine.googlecode.com/svn/trunk@10485 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

Change Summary

Incremental Difference

--- a/engine/src/android/com/jme3/app/AndroidHarness.java
+++ b/engine/src/android/com/jme3/app/AndroidHarness.java
@@ -31,6 +31,7 @@ import com.jme3.system.android.OGLESContext;
3131 import com.jme3.util.AndroidLogHandler;
3232 import java.io.PrintWriter;
3333 import java.io.StringWriter;
34+import java.util.logging.Handler;
3435 import java.util.logging.Level;
3536 import java.util.logging.LogManager;
3637 import java.util.logging.Logger;
@@ -65,7 +66,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
6566 */
6667 @Deprecated
6768 protected boolean eglConfigVerboseLogging = false;
68-
69+
6970 /**
7071 * set to 2, 4 to enable multisampling.
7172 */
@@ -160,7 +161,8 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
160161
161162 @Override
162163 public void onCreate(Bundle savedInstanceState) {
163- LogManager.getLogManager().getLogger("").addHandler(new AndroidLogHandler());
164+ initializeLogHandler();
165+
164166 logger.fine("onCreate");
165167 super.onCreate(savedInstanceState);
166168
@@ -198,7 +200,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
198200 settings.setSamples(antiAliasingSamples);
199201 settings.setResolution(disp.getWidth(), disp.getHeight());
200202 settings.put(AndroidConfigChooser.SETTINGS_CONFIG_TYPE, eglConfigType);
201-
203+
202204
203205 // Create application instance
204206 try {
@@ -473,6 +475,24 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
473475 }
474476 }
475477
478+ /**
479+ * Removes the standard Android log handler due to an issue with not logging
480+ * entries lower than INFO level and adds a handler that produces
481+ * JME formatted log messages.
482+ */
483+ protected void initializeLogHandler() {
484+ Logger log = LogManager.getLogManager().getLogger("");
485+ for (Handler handler : log.getHandlers()) {
486+ if (log.getLevel() != null && log.getLevel().intValue() <= Level.FINE.intValue()) {
487+ Log.v("AndroidHarness", "Removing Handler class: " + handler.getClass().getName());
488+ }
489+ log.removeHandler(handler);
490+ }
491+ Handler handler = new AndroidLogHandler();
492+ log.addHandler(handler);
493+ handler.setLevel(Level.ALL);
494+ }
495+
476496 public void initialize() {
477497 app.initialize();
478498 if (handleExitHook) {
--- a/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
+++ b/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
@@ -115,34 +115,7 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
115115 }
116116
117117 initialized = true;
118- try {
119-// JmeFormatter formatter = new JmeFormatter();
120-// Handler consoleHandler = new AndroidLogHandler();
121-// consoleHandler.setFormatter(formatter);
122-//
123-// Logger log = Logger.getLogger("");
124-// for (Handler h : log.getHandlers()) {
125-// log.removeHandler(h);
126-// }
127-// log.addHandler(consoleHandler);
128- Logger log = Logger.getLogger(JmeAndroidSystem.class.getName());
129- boolean bIsLogFormatSet = false;
130- do {
131- log.setLevel(Level.ALL);
132- if (log.getHandlers().length == 0) {
133- log = log.getParent();
134- if (log != null) {
135- for (Handler h : log.getHandlers()) {
136- h.setFormatter(new JmeFormatter());
137- h.setLevel(Level.ALL);
138- bIsLogFormatSet = true;
139- }
140- }
141- }
142- } while (log != null && !bIsLogFormatSet);
143- } catch (SecurityException ex) {
144- logger.log(Level.SEVERE, "Security error in creating log file", ex);
145- }
118+
146119 logger.log(Level.INFO, "Running on {0}", getFullName());
147120 }
148121
--- a/engine/src/android/com/jme3/util/AndroidLogHandler.java
+++ b/engine/src/android/com/jme3/util/AndroidLogHandler.java
@@ -15,22 +15,31 @@ import java.util.logging.Logger;
1515 */
1616 public class AndroidLogHandler extends Handler {
1717
18- private static final Formatter THE_FORMATTER = new Formatter() {
18+ private static final Formatter JME_FORMATTER = new JmeFormatter() {
19+
20+ String lineSeperator = System.getProperty("line.separator");
21+
1922 @Override
20- public String format(LogRecord r) {
21- Throwable thrown = r.getThrown();
22- if (thrown != null) {
23- StringWriter sw = new StringWriter();
24- PrintWriter pw = new PrintWriter(sw);
25- sw.write(r.getMessage());
26- sw.write("\n");
27- thrown.printStackTrace(pw);
28- pw.flush();
29- return sw.toString();
30- } else {
31- return r.getMessage();
23+ public String format(LogRecord record) {
24+ StringBuilder sb = new StringBuilder();
25+
26+ sb.append(record.getLevel().getLocalizedName()).append(" ");
27+ sb.append(formatMessage(record)).append(lineSeperator);
28+
29+ if (record.getThrown() != null) {
30+ try {
31+ StringWriter sw = new StringWriter();
32+ PrintWriter pw = new PrintWriter(sw);
33+ record.getThrown().printStackTrace(pw);
34+ pw.close();
35+ sb.append(sw.toString());
36+ } catch (Exception ex) {
37+ }
3238 }
39+
40+ return sb.toString();
3341 }
42+
3443 };
3544
3645 @Override
@@ -44,14 +53,13 @@ public class AndroidLogHandler extends Handler {
4453 @Override
4554 public void publish(LogRecord record) {
4655
47- try {
48- Level level = record.getLevel();
49- String tag = record.getLoggerName();
50- String msg = THE_FORMATTER.format(record);
51- int lv = getAndroidLevel(level);
52-
53- Log.println(lv, tag, msg);
56+ int level = getAndroidLevel(record.getLevel());
57+// String tag = loggerNameToTag(record.getLoggerName());
58+ String tag = record.getLoggerName();
5459
60+ try {
61+ String message = JME_FORMATTER.format(record);
62+ Log.println(level, tag, message);
5563 } catch (RuntimeException e) {
5664 Log.e("AndroidHandler", "Error logging message.", e);
5765 }
@@ -77,4 +85,26 @@ public class AndroidLogHandler extends Handler {
7785 return Log.DEBUG;
7886 }
7987 }
88+
89+ /**
90+ * Returns the short logger tag for the given logger name.
91+ * Traditionally loggers are named by fully-qualified Java classes; this
92+ * method attempts to return a concise identifying part of such names.
93+ */
94+ public static String loggerNameToTag(String loggerName) {
95+ // Anonymous logger.
96+ if (loggerName == null) {
97+ return "null";
98+ }
99+
100+ int length = loggerName.length();
101+ int lastPeriod = loggerName.lastIndexOf(".");
102+
103+ if (lastPeriod == -1) {
104+ return loggerName;
105+ }
106+
107+ return loggerName.substring(lastPeriod + 1);
108+ }
109+
80110 }