1 package com.smartdevicelink.util;
\r
3 import java.util.Vector;
\r
5 import android.util.Log;
\r
7 import com.smartdevicelink.exception.SmartDeviceLinkException;
\r
8 import com.smartdevicelink.proxy.Version;
\r
9 import com.smartdevicelink.transport.SiphonServer;
\r
11 public class DebugTool {
\r
14 public static final String TAG = "SmartDeviceLinkProxy";
\r
16 private static boolean isErrorEnabled = false;
\r
17 private static boolean isWarningEnabled = false;
\r
18 private static boolean isInfoEnabled = false;
\r
20 public static void enableDebugTool() {
\r
21 isErrorEnabled = true;
\r
22 isWarningEnabled = true;
\r
23 isInfoEnabled = true;
\r
26 public static void disableDebugTool() {
\r
27 isErrorEnabled = true;
\r
28 isWarningEnabled = false;
\r
29 isInfoEnabled = false;
\r
32 public static boolean isDebugEnabled()
\r
34 if (isWarningEnabled && isInfoEnabled) return true;
\r
39 private static String prependProxyVersionNumberToString(String string) {
\r
40 if (Version.VERSION != null && string != null) {
\r
41 string = Version.VERSION + ": " + string;
\r
47 public static void logError(String msg) {
\r
49 Boolean wasWritten = false;
\r
51 msg = prependProxyVersionNumberToString(msg);
\r
53 wasWritten = logToSiphon(msg);
\r
55 if (isErrorEnabled && !wasWritten) {
\r
56 NativeLogTool.logError(TAG, msg);
\r
60 public static void logError(String msg, Throwable ex) {
\r
61 Boolean wasWritten = false;
\r
63 msg = prependProxyVersionNumberToString(msg);
\r
66 wasWritten = logToSiphon(msg + " Exception String: " + ex.toString());
\r
68 wasWritten = logToSiphon(msg);
\r
71 if (isErrorEnabled && !wasWritten) {
\r
72 NativeLogTool.logError(TAG, msg, ex);
\r
76 public static void logWarning(String msg) {
\r
77 Boolean wasWritten = false;
\r
79 msg = prependProxyVersionNumberToString(msg);
\r
81 wasWritten = logToSiphon(msg);
\r
83 if (isWarningEnabled && !wasWritten) {
\r
84 NativeLogTool.logWarning(TAG, msg);
\r
88 public static void logInfo(String msg) {
\r
89 Boolean wasWritten = false;
\r
91 msg = prependProxyVersionNumberToString(msg);
\r
93 wasWritten = logToSiphon(msg);
\r
95 if (isInfoEnabled && !wasWritten) {
\r
96 NativeLogTool.logInfo(TAG, msg);
\r
100 public static void logInfo(String msg, boolean bPrependVersion) {
\r
101 Boolean wasWritten = false;
\r
103 if (bPrependVersion) msg = prependProxyVersionNumberToString(msg);
\r
105 wasWritten = logToSiphon(msg);
\r
107 if (isInfoEnabled && !wasWritten) {
\r
108 NativeLogTool.logInfo(TAG, msg);
\r
112 protected static Boolean logToSiphon(String msg) {
\r
113 // Initialize the SiphonServer, will be ignored if already initialized
\r
114 SiphonServer.init();
\r
116 // Write to the SiphonServer
\r
117 return SiphonServer.sendSiphonLogData(msg);
\r
120 protected static String getLine(Throwable ex) {
\r
121 if (ex == null) { return null; }
\r
122 String toPrint = ex.toString() + " :" + ex.getMessage();
\r
123 for (int i=0; i<ex.getStackTrace().length; i++) {
\r
124 StackTraceElement elem = ex.getStackTrace()[i];
\r
125 toPrint += "\n " + elem.toString();
\r
128 if (ex instanceof SmartDeviceLinkException) {
\r
129 SmartDeviceLinkException smartDeviceLinkEx = (SmartDeviceLinkException) ex;
\r
130 if (smartDeviceLinkEx.getInnerException() != null && smartDeviceLinkEx != smartDeviceLinkEx.getInnerException()) {
\r
131 toPrint += "\n nested:\n";
\r
132 toPrint += getLine(smartDeviceLinkEx.getInnerException());
\r
140 protected static Vector<IConsole> consoleListenerList = new Vector<IConsole>();
\r
142 protected final static boolean isTransportEnabled = false;
\r
143 protected final static boolean isRPCEnabled = false;
\r
145 public static void addConsole(IConsole console) {
\r
146 synchronized(consoleListenerList) {
\r
147 consoleListenerList.addElement(console);
\r
151 public static void removeConsole(IConsole console) {
\r
152 synchronized(consoleListenerList) {
\r
153 consoleListenerList.removeElement(console);
\r
157 public static void clearConsoles() {
\r
158 synchronized(consoleListenerList) {
\r
159 consoleListenerList.removeAllElements();
\r
163 public static void logTransport(String msg) {
\r
164 if (isTransportEnabled) {
\r
166 logInfoToConsole(msg);
\r
170 public static void logRPCSend(String rpcMsg) {
\r
171 if (isRPCEnabled) {
\r
172 Log.d(TAG, "Sending RPC message: " + rpcMsg);
\r
173 logRPCSendToConsole(rpcMsg);
\r
177 public static void logRPCReceive(String rpcMsg) {
\r
178 if (isRPCEnabled) {
\r
179 Log.d(TAG, "Received RPC message: " + rpcMsg);
\r
180 logRPCSendToConsole(rpcMsg);
\r
184 protected static void logInfoToConsole(String msg) {
\r
185 Vector<IConsole> localList;
\r
186 synchronized(consoleListenerList) {
\r
187 localList = (Vector<IConsole>) consoleListenerList.clone();
\r
190 for (int i = 0; i < localList.size(); i++) {
\r
191 IConsole consoleListener = (IConsole) localList.elementAt(i);
\r
193 consoleListener.logInfo(msg);
\r
194 } catch (Exception ex) {
\r
195 Log.e(TAG, "Failure propagating logInfo: " + ex.toString(), ex);
\r
200 protected static void logErrorToConsole(String msg) {
\r
201 Vector<IConsole> localList;
\r
202 synchronized(consoleListenerList) {
\r
203 localList = (Vector<IConsole>) consoleListenerList.clone();
\r
205 for (int i = 0; i < localList.size(); i++) {
\r
206 IConsole consoleListener = (IConsole) localList.elementAt(i);
\r
208 consoleListener.logError(msg);
\r
209 } catch (Exception ex) {
\r
210 Log.e(TAG, "Failure propagating logError: " + ex.toString(), ex);
\r
215 protected static void logErrorToConsole(String msg, Throwable e) {
\r
216 Vector<IConsole> localList;
\r
217 synchronized(consoleListenerList) {
\r
218 localList = (Vector<IConsole>) consoleListenerList.clone();
\r
221 for (int i = 0; i < localList.size(); i++) {
\r
222 IConsole consoleListener = (IConsole) localList.elementAt(i);
\r
224 consoleListener.logError(msg, e);
\r
225 } catch (Exception ex) {
\r
226 Log.e(TAG, "Failure propagating logError: " + ex.toString(), ex);
\r
231 protected static void logRPCSendToConsole(String msg) {
\r
232 Vector<IConsole> localList;
\r
233 synchronized(consoleListenerList) {
\r
234 localList = (Vector<IConsole>) consoleListenerList.clone();
\r
237 for (int i = 0; i < localList.size(); i++) {
\r
238 IConsole consoleListener = (IConsole) localList.elementAt(i);
\r
240 consoleListener.logRPCSend(msg);
\r
241 } catch (Exception ex) {
\r
242 Log.e(TAG, "Failure propagating logRPCSend: " + ex.toString(), ex);
\r
247 protected static void logRPCReceiveToConsole(String msg) {
\r
248 Vector<IConsole> localList;
\r
249 synchronized(consoleListenerList) {
\r
250 localList = (Vector<IConsole>) consoleListenerList.clone();
\r
253 for (int i = 0; i < localList.size(); i++) {
\r
254 IConsole consoleListener = (IConsole) localList.elementAt(i);
\r
256 consoleListener.logRPCReceive(msg);
\r
257 } catch (Exception ex) {
\r
258 Log.e(TAG, "Failure propagating logRPCReceive: " + ex.toString(), ex);
\r