1、修改日志log4j,让其支持多个文件输出。 以便控制所有日志的大小。防止放出去的系统时间久了出现资源不够的情况。
authorsnickersun <scy@incartech.cn>
Mon, 16 Mar 2020 09:16:15 +0000 (17:16 +0800)
committersnickersun <scy@incartech.cn>
Mon, 16 Mar 2020 09:16:15 +0000 (17:16 +0800)
2、日志都改为指向/sdcard/Android/ic, 与Launcher一致,以便统一上传。

13 files changed:
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/GSensorListener.java
app/src/main/java/com/enqualcomm/support/ICApplication.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java
app/src/main/java/com/enqualcomm/support/toolActivity.java
app/src/main/java/com/enqualcomm/support/utils/AlarmWakeUp.java
app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/FileOutputUtil.java
app/src/main/java/com/enqualcomm/support/utils/ICLogger.java
app/src/main/java/com/enqualcomm/support/utils/StorageUtils.java
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_tool.xml

index 7384b32..1a03a9f 100644 (file)
@@ -141,7 +141,7 @@ public class CoreService extends Service {
                         stringBuilder1.append(Integer.valueOf(str, 16));\r
                         stringBuilder1.append(",CELLID=");\r
                         stringBuilder1.append(Integer.valueOf(str1, 16));\r
-                        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "cellInfoTest", stringBuilder1.toString());\r
+                        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "LBS", stringBuilder1.toString());\r
                     }\r
                 }\r
             }\r
@@ -765,7 +765,7 @@ public class CoreService extends Service {
         AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,delayTimeInMinutes, ACTION_SEND_EMEGENCY_LOCATION_STOP);\r
         sb.append(" tEmegencyLocationSTOPAlarm  "+ACTION_SEND_EMEGENCY_LOCATION_STOP);\r
         ICLogger.i(sb.toString());\r
-        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"LocationAlarm",sb.toString());\r
+        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());\r
     }\r
     public void setLocationAlarm(int mod) {\r
 //        int mod=runtime.getLocationInstance().getWorkingMod();\r
@@ -792,7 +792,7 @@ public class CoreService extends Service {
         locationClient.triggerLocationProcess();\r
 \r
         ICLogger.i(sb.toString());\r
-        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"LocationAlarm",sb.toString());\r
+        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());\r
     }\r
 \r
     public void setHeartAlarm(){\r
@@ -805,7 +805,7 @@ public class CoreService extends Service {
         sb.append(" setHeartAlarm  "+HEART_ALARM+", cycle "+cycle);\r
 //        locationClient.triggerLocationProcess();\r
         ICLogger.i(sb.toString());\r
-        FileOutputUtil.fileOutput(runtime.getCacheDir(),"HeartAlarm",sb.toString());\r
+        FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());\r
 \r
 //        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,1, HEART_ALARM);\r
     }\r
index a00075e..100a007 100644 (file)
@@ -32,7 +32,7 @@ public class GSensorListener  {
         ICLogger.i(stringBuilder1.toString());\r
         runtime.setTotalStepCount(CURRENT_STEP);\r
         GSensorListener.getStepCountOver=false;\r
-        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "CURRENT_STEP", stringBuilder1.toString());\r
+//        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "CURRENT_STEP", stringBuilder1.toString());\r
       }\r
     };\r
 \r
index 55647d9..7847a9a 100644 (file)
@@ -3,20 +3,10 @@ package com.enqualcomm.support;
 import android.app.Application;\r
 import android.content.Context;\r
 import android.content.res.Configuration;\r
-import android.os.Environment;\r
 import android.os.Handler;\r
 import android.support.multidex.MultiDex;\r
-import android.util.Log;\r
 import android.util.SparseArray;\r
-\r
-\r
-import com.enqualcomm.support.BuildConfig;\r
-import com.enqualcomm.support.utils.StorageUtils;\r
-import com.sina.util.dnscache.DNSCache;\r
-\r
-import org.apache.log4j.Level;\r
-\r
-import java.io.File;\r
+import com.enqualcomm.support.utils.ICLogger;\r
 import java.util.HashMap;\r
 \r
 \r
@@ -26,36 +16,37 @@ import de.mindpipe.android.logging.log4j.LogConfigurator;
 \r
 public class ICApplication extends Application {\r
     private static final String TAG = "protocol." + ICApplication.class.getSimpleName();\r
-    private static final boolean DEBUG = BuildConfig.DEBUG;\r
+//    private static final boolean DEBUG = BuildConfig.DEBUG;\r
 \r
     private static ICApplication instance=null;\r
 \r
     private static HashMap<String, SparseArray<Handler>> mConfigurationChangedHandlerHashMap = new HashMap<>();\r
 \r
 \r
-    private static void log(String msg) {\r
-        if (DEBUG) {\r
-            Log.i(TAG, msg);\r
-//            FileLoger.log(TAG, "", msg);\r
-        }\r
-    }\r
-\r
-    private static void log(String funcName, String msg) {\r
-        if (DEBUG) {\r
-            Log.i(TAG, "[" + funcName + "]" + msg);\r
-//            FileLoger.log(TAG, funcName, msg);\r
-        }\r
-    }\r
+//    private static void log(String msg) {\r
+//        if (DEBUG) {\r
+//            Log.i(TAG, msg);\r
+////            FileLoger.log(TAG, "", msg);\r
+//        }\r
+//    }\r
+//\r
+//    private static void log(String funcName, String msg) {\r
+//        if (DEBUG) {\r
+//            Log.i(TAG, "[" + funcName + "]" + msg);\r
+////            FileLoger.log(TAG, funcName, msg);\r
+//        }\r
+//    }\r
 \r
     @Override\r
     public void onCreate() {\r
         super.onCreate();\r
 \r
-        initLogger();\r
+        ICLogger.setContext(this.getApplicationContext());\r
+\r
         String info = String.format("VERSION_CODE:%s, VERSION_NAME:%s",\r
                 BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME);\r
-        log("onCreate", info);\r
-        Log.i(TAG, "[onCreate]" + info);\r
+//        log("onCreate", info);\r
+        ICLogger.i(TAG+"[onCreate]" + info);\r
 \r
         CrashHandler crashHandler = CrashHandler.getInstance();\r
         crashHandler.init(getApplicationContext());\r
@@ -65,45 +56,7 @@ public class ICApplication extends Application {
   //      log("softwareVersion:" + softwareVersion);\r
 \r
     }\r
-    /**\r
-     初始化与配置Logger   Log4j\r
-     日志信息格式中符号所代表的含义\r
-     (1)-X号: X信息输出时左对齐。\r
-     (2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL。\r
-     (3)%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921。\r
-     (4)%r: 输出自应用启动到输出该log信息耗费的毫秒数。\r
-     (5)%c: 输出日志信息所属的类目,通常就是所在类的全名。\r
-     (6)%t: 输出产生该日志事件的线程名。\r
-     (7)%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)。\r
-     (8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。\r
-     (9)%%: 输出一个"%"字符。\r
-     (10)%F: 输出日志消息产生时所在的文件名称。\r
-     (11)%L: 输出代码中的行号。\r
-     (12)%m: 输出代码中指定的消息,产生的日志具体信息。\r
-     (13)%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行。\r
-     可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:\r
-     (1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。\r
-     (2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。\r
-     (3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。\r
-     (4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。\r
-     ————————————————\r
-     版权声明:本文为CSDN博主「King-zi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。\r
-     原文链接:https://blog.csdn.net/zjclugger/article/details/51576156\r
-     */\r
-    private void initLogger(){\r
-        LogConfigurator logConfigurator = new LogConfigurator();\r
-\r
-        logConfigurator.setFileName(StorageUtils.getCacheDirectory(this.getApplicationContext()).getAbsolutePath()\r
-                + File.separator + "log.txt");                         // 日志存储路径,如果该路径没有会自动创建文件\r
-        logConfigurator.setRootLevel(Level.DEBUG);\r
-        logConfigurator.setLevel("log", Level.ERROR);\r
-//        logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");\r
-        logConfigurator.setFilePattern("%d %m%n ");\r
-//        02-29 16:28:38.195 4629-4658/com.enqualcomm.support E/com.enqualcomm.support.utils.ICLogger:\r
-        logConfigurator.setMaxFileSize(1024 * 1024 * 20);\r
-        logConfigurator.setImmediateFlush(true);\r
-        logConfigurator.configure();                           // 设置提交\r
-    }\r
+\r
 \r
     public static ICApplication getInstance() {\r
         return instance;\r
@@ -122,12 +75,12 @@ public class ICApplication extends Application {
      */\r
     @Override\r
     public void onConfigurationChanged(Configuration newConfig) {\r
-        log("onConfigurationChanged");\r
+        ICLogger.i("onConfigurationChanged");\r
         super.onConfigurationChanged(newConfig);\r
 \r
         for (Object keyObj : mConfigurationChangedHandlerHashMap.keySet()) {\r
             String key = (String) keyObj;\r
-            Log.i("WatchApplication", "onConfigurationChanged, " + key);\r
+            ICLogger.i("WatchApplication"+ " onConfigurationChanged, " + key);\r
             SparseArray<Handler> sparseArray = mConfigurationChangedHandlerHashMap.get(key);\r
             if (sparseArray != null) {\r
                 Handler handler = sparseArray.valueAt(0);\r
@@ -146,6 +99,6 @@ public class ICApplication extends Application {
      */\r
     public void setConfigurationChangedHandler(String key, SparseArray<Handler> sparseArray) {\r
         mConfigurationChangedHandlerHashMap.put(key, sparseArray);\r
-        log("setConfigurationChangedHandler: " + key);\r
+        ICLogger.i("setConfigurationChangedHandler: " + key);\r
     }\r
 }\r
index 0a67404..af8ff33 100644 (file)
@@ -396,13 +396,13 @@ public class ICSmsManager {
                             String logfile=cmdl[1];\r
 \r
                             if (logfile.isEmpty()|| logfile.equals("all")) {\r
-                                String filelist[] = {"crashlog", "Nmea","APILog", "GPS", "LocationAlarm", "Battery", "log"};\r
+                                String filelist[] = {"crashlog", "Nmea","APILog", "GPS", "alarmCycle", "Battery", "log"};\r
 //                                String filelist[]={"APILog","LocationAlarm","Battery"};\r
                                 String time = TimeUtil.getSystemTime3();\r
                                 StringBuilder sb = new StringBuilder();\r
                                 Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
                                     public void call(Long param1Long) {\r
-                                        sendSMS(phonenumber, "start Upload allLogfile [crashlog Nmea APILog log GPS LocationAlarm Battery] to " + Config.getFtpServer(mContext));\r
+                                        sendSMS(phonenumber, "start Upload allLogfile [crashlog Nmea APILog log GPS alarmCycle Battery] to " + Config.getFtpServer(mContext));\r
                                         String logtime = TimeUtil.getSystemTime3();\r
                                         for (String file : filelist) {\r
 \r
index ffc5b77..624b4ee 100644 (file)
@@ -209,7 +209,7 @@ public class LBSHelper {
                      this.runtime.setCellinfo(gsmSb.toString());\r
                      this.runtime.setCdmaInfo(null);\r
                     ICLogger.i("GsmCellLocation "+ gsmSb.toString());\r
-                     if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "onCellLocationChanged", gsmSb.toString());\r
+                     if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "LBS", gsmSb.toString());\r
 \r
                      List neighboringCell_list = telephonyManager.getNeighboringCellInfo();\r
                      if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {\r
@@ -258,7 +258,7 @@ public class LBSHelper {
                      this.runtime.setCellinfo(null);\r
                      this.runtime.setCdmaInfo(cdmaSB.toString());\r
 \r
-                     if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "onCellLocationChanged", var8.toString());\r
+                     if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "LBS", var8.toString());\r
                     return cdmaSB.toString();\r
 \r
                 }\r
index 8aa6af3..9e3afac 100644 (file)
@@ -63,7 +63,9 @@ public class toolActivity extends AppCompatActivity {
         btnSimReload.setOnClickListener(new View.OnClickListener() {\r
             @Override\r
             public void onClick(View view) {\r
-                SimSignalUtil.send_at_to_reload_simcard(CoreService.getInstance().runtime);\r
+\r
+\r
+\r
                 Util.ShowToast(CoreService.getInstance().runtime,"Reload SimCard!");\r
 \r
             }\r
@@ -73,7 +75,7 @@ public class toolActivity extends AppCompatActivity {
             @Override\r
             public void onClick(View view) {\r
                 Intent intent=new Intent();\r
-                intent.putExtra("smsCmd","#logctl#=upload,SDLogInfo:Android");\r
+                intent.putExtra("smsCmd","#logctl#=upload,SDLogInfo:Android/ic");\r
                 CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
             }\r
         });\r
index cb163b9..0fa7454 100644 (file)
@@ -31,7 +31,7 @@ public class AlarmWakeUp {
       stringBuilder.append("---lastAlarmTime=");\r
       stringBuilder.append(lastAlarmTime);\r
       ICLogger.i("AlarmWakeUp "+ stringBuilder.toString());\r
-      if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmWakeUp", stringBuilder.toString());\r
+      if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", stringBuilder.toString());\r
     } \r
   }\r
   \r
index 0fd092c..021873d 100644 (file)
@@ -109,7 +109,7 @@ public class CellInfoUtil {
 //                EqcAlgorithmNative.native_EqcAlgorithmMethod4(0, 0, CellInfoUtil.BSSS, CellInfoUtil.MCC, CellInfoUtil.MNC, CellInfoUtil.LAC, CellInfoUtil.CELL_ID);\r
                   mRuntime.cellinfo = mCellInfo;\r
                 }\r
-                if (Config.LOG_TOFILE)FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"onCellLocationChanged", mCellInfo);\r
+                if (Config.LOG_TOFILE)FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"LBS", mCellInfo);\r
                 CellInfoUtil.releaseWakeLock(mWakeLock);\r
                 ICLogger.i(" setCurrentAttachCellInfo " + mCellInfo);\r
 \r
@@ -135,7 +135,7 @@ public class CellInfoUtil {
                 stringBuilder.append(CellInfoUtil.BSSS);\r
                 runtime.cellinfo = stringBuilder.toString();\r
 //              EqcAlgorithmNative.native_EqcAlgorithmMethod4(1, 0, CellInfoUtil.BSSS, CellInfoUtil.MCC, CellInfoUtil.MNC, CellInfoUtil.LAC, CellInfoUtil.CELL_ID);\r
-                if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "onCellLocationChanged", mRuntime.cellinfo);\r
+                if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "LBS", mRuntime.cellinfo);\r
                 CellInfoUtil.releaseWakeLock(mWakeLock);\r
                 ICLogger.i(" setCurrentAttachCellInfo " + mCellInfo);\r
 \r
index 718bfba..b61d848 100644 (file)
@@ -120,43 +120,29 @@ public class FileOutputUtil {
   }\r
   public static void fileOutputRaw(File dir, String filename, String msg) {\r
 //    String str = TimeUtil.getSystemTime();\r
-    if (msg!=null && msg.trim().length()>0) {\r
-      StringBuilder stringBuilder = new StringBuilder();\r
-      stringBuilder.append(filename);\r
-      stringBuilder.append(".txt");\r
-      File file = new File(dir, stringBuilder.toString());\r
-      try {\r
-        PrintStream printStream = new PrintStream(new FileOutputStream(file, true));\r
-        StringBuilder stringBuilder1 = new StringBuilder();\r
-        stringBuilder1.append(msg);\r
-        printStream.println(stringBuilder1.toString());\r
-        printStream.close();\r
 \r
-      } catch (FileNotFoundException e) {\r
-        e.printStackTrace();\r
+    ICLogger.logRAWtoFile(filename,msg);\r
 \r
-      }\r
-    }\r
+//    if (msg!=null && msg.trim().length()>0) {\r
+//      StringBuilder stringBuilder = new StringBuilder();\r
+//      stringBuilder.append(filename);\r
+//      stringBuilder.append(".txt");\r
+//      File file = new File(dir, stringBuilder.toString());\r
+//      try {\r
+//        PrintStream printStream = new PrintStream(new FileOutputStream(file, true));\r
+//        StringBuilder stringBuilder1 = new StringBuilder();\r
+//        stringBuilder1.append(msg);\r
+//        printStream.println(stringBuilder1.toString());\r
+//        printStream.close();\r
+//\r
+//      } catch (FileNotFoundException e) {\r
+//        e.printStackTrace();\r
+//\r
+//      }\r
+//    }\r
   }\r
   public static void fileOutput(File dir, String filename, String msg) {\r
-    String str = TimeUtil.getSystemTime();\r
-    if (msg!=null && msg.trim().length()>0) {\r
-      StringBuilder stringBuilder = new StringBuilder();\r
-      stringBuilder.append(filename);\r
-      stringBuilder.append(".txt");\r
-      File file = new File(dir, stringBuilder.toString());\r
-      try {\r
-        PrintStream printStream = new PrintStream(new FileOutputStream(file, true));\r
-        StringBuilder stringBuilder1 = new StringBuilder();\r
-        stringBuilder1.append(str);\r
-        stringBuilder1.append(" ");\r
-        stringBuilder1.append(msg);\r
-        printStream.println(stringBuilder1.toString());\r
-        printStream.close();\r
-      } catch (FileNotFoundException e) {\r
-        e.printStackTrace();\r
-      }\r
-    }\r
+    ICLogger.logToFile(filename,msg);\r
   }\r
 }\r
 \r
index 72f73e5..913f600 100644 (file)
@@ -1,18 +1,45 @@
 package com.enqualcomm.support.utils;\r
 \r
-import android.util.Log;\r
+import android.content.Context;\r
 \r
-import com.enqualcomm.support.Config;\r
-import com.enqualcomm.support.CoreService;\r
+import com.enqualcomm.support.ICApplication;\r
 \r
+import org.apache.log4j.Appender;\r
+import org.apache.log4j.FileAppender;\r
+import org.apache.log4j.Layout;\r
 import org.apache.log4j.Level;\r
 import org.apache.log4j.Logger;\r
+import org.apache.log4j.PatternLayout;\r
+import org.apache.log4j.RollingFileAppender;\r
+import org.apache.log4j.spi.ErrorHandler;\r
+import org.apache.log4j.spi.Filter;\r
+import org.apache.log4j.spi.LoggingEvent;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+\r
+import de.mindpipe.android.logging.log4j.LogConfigurator;\r
+\r
+\r
 \r
 public class ICLogger {\r
 \r
-  private static Logger Log = Logger.getLogger(ICLogger.class);\r
-//  private static java.util.logging.Logger originLog= java.util.logging.Logger.getLogger(ICLogger.class.getSimpleName());\r
+    private static boolean isInitConfig = false;\r
+    private static Context mContext=null;\r
+\r
+  private static Logger Log = null;\r
+  private static Logger GPS = null;\r
+  private static Logger Nmea = null;\r
+  private static Logger APILog = null;\r
+  private static Logger alarmCycle = null;\r
+  private static Logger Battery = null;\r
+  private static Logger LBS = null;\r
+  //  private static java.util.logging.Logger originLog= java.util.logging.Logger.getLogger(ICLogger.class.getSimpleName());\r
   private static final boolean DEBUG = true;   //BuildConfig.DEBUG;\r
+\r
+  public static void setContext(Context context){\r
+    mContext=context;\r
+  }\r
   private static String getFunctionName() {\r
     StackTraceElement[] currentStack = Thread.currentThread().getStackTrace();\r
     if (currentStack == null) {\r
@@ -40,58 +67,242 @@ public class ICLogger {
       return null;\r
     }\r
   }\r
-  public static void i(String var0) {\r
-    if (DEBUG && var0 !=null) {\r
-      String var1 = getFunctionName();\r
-      if (var1 != null) {\r
-        StringBuilder sb = new StringBuilder();\r
-        sb.append(var1);\r
-        sb.append(" - ");\r
-        sb.append(var0);\r
-        log("WatchService", sb.toString());\r
-        return;\r
-      }\r
 \r
-      log("WatchService", var0.toString());\r
+  /**\r
+   初始化与配置Logger   Log4j\r
+   日志信息格式中符号所代表的含义\r
+   (1)-X号: X信息输出时左对齐。\r
+   (2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL。\r
+   (3)%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921。\r
+   (4)%r: 输出自应用启动到输出该log信息耗费的毫秒数。\r
+   (5)%c: 输出日志信息所属的类目,通常就是所在类的全名。\r
+   (6)%t: 输出产生该日志事件的线程名。\r
+   (7)%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)。\r
+   (8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。\r
+   (9)%%: 输出一个"%"字符。\r
+   (10)%F: 输出日志消息产生时所在的文件名称。\r
+   (11)%L: 输出代码中的行号。\r
+   (12)%m: 输出代码中指定的消息,产生的日志具体信息。\r
+   (13)%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行。\r
+   可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:\r
+   (1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。\r
+   (2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。\r
+   (3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。\r
+   (4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。\r
+   */\r
+    private static void initConfig() {\r
+      if (!isInitConfig) {\r
+\r
+        LogConfigurator logConfigurator = new LogConfigurator();\r
+\r
+        String filename=StorageUtils.getExternalStorageLogDir()+ File.separator + "log.txt";\r
+        logConfigurator.setFileName(filename);                         // 日志存储路径,如果该路径没有会自动创建文件\r
+        logConfigurator.setRootLevel(Level.ALL);\r
+\r
+        logConfigurator.setLevel("log", Level.ALL);\r
+//        logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");// 设置文件输出模式\r
+        logConfigurator.setFilePattern("%d %m%n ");// 设置文件输出模式\r
+//        02-29 16:28:38.195 4629-4658/com.enqualcomm.support E/com.enqualcomm.support.utils.ICLogger:\r
+        logConfigurator.setMaxBackupSize(3); // 设置最大备份数量\r
+        logConfigurator.setMaxFileSize(1024 * 1024 * 20);// 设置最大文件大小  20MB\r
+        logConfigurator.setImmediateFlush(true);// 设置是否立即刷新\r
+        logConfigurator.setUseFileAppender(true); // 设置用户文件输出器\r
+        logConfigurator.setInternalDebugging(false); //控制console是否输出\r
+        logConfigurator.setUseLogCatAppender(true);\r
+        logConfigurator.setLogCatPattern("%m%n");\r
+        logConfigurator.configure();// 设置提交\r
+\r
+\r
+//        String logfilelist[]={"Log","GPS","Nmea","APILog","alarmCycle","Battery","LBS"};\r
+\r
+        //Log 和log目前是同一个配置\r
+        Log = Logger.getLogger("log");\r
+        Log.info("init Logger "+Log.getName());\r
+//        Log.addAppender( getRollingFileAppender("log","%d %m%n "));\r
+//        Log.info("init Logger "+Log.getName()+" "+((RollingFileAppender)Log.getAppender("log")).getFile());\r
+\r
+        GPS = Logger.getLogger("GPS");\r
+        GPS.addAppender( getRollingFileAppender("GPS","%d %m%n "));\r
+        GPS.info("init Logger "+GPS.getName()+" "+((RollingFileAppender)GPS.getAppender("GPS")).getFile());\r
+\r
+        Nmea = Logger.getLogger("Nmea");\r
+        Nmea.addAppender( getRollingFileAppender("Nmea","%m%n"));\r
+        Nmea.info("init Logger "+Nmea.getName()+" "+((RollingFileAppender)Nmea.getAppender("Nmea")).getFile());\r
+\r
+        APILog = Logger.getLogger("APILog");\r
+        APILog.addAppender( getRollingFileAppender("APILog","%d %m%n "));\r
+        APILog.info("init Logger "+APILog.getName()+" "+((RollingFileAppender)APILog.getAppender("APILog")).getFile());\r
+\r
+        alarmCycle = Logger.getLogger("alarmCycle");\r
+        alarmCycle.addAppender( getRollingFileAppender("alarmCycle","%d %m%n "));\r
+        alarmCycle.info("init Logger "+alarmCycle.getName()+" "+((RollingFileAppender)alarmCycle.getAppender("alarmCycle")).getFile());\r
+\r
+        Battery = Logger.getLogger("Battery");\r
+        Battery.addAppender( getRollingFileAppender("Battery","%d %m%n "));\r
+        Battery.info("init Logger "+Battery.getName()+" "+((RollingFileAppender)Battery.getAppender("Battery")).getFile());\r
+\r
+\r
+        LBS = Logger.getLogger("LBS");\r
+        LBS.addAppender( getRollingFileAppender("LBS","%d %m%n "));\r
+        LBS.info("init Logger "+LBS.getName()+" "+((RollingFileAppender)LBS.getAppender("LBS")).getFile());\r
+        isInitConfig = true;\r
+      }\r
     }\r
 \r
+    public static void logRAWtoFile(String filename,String msg){\r
+      if (filename.equals("Nmea")){\r
+        Nmea.info(msg);\r
+      }else if  (filename.equals("LBS")) {\r
+        LBS.info(msg);\r
+      }else if  (filename.equals("GPS")) {\r
+        GPS.info(msg);\r
+      }else if  (filename.equals("APILog")) {\r
+        APILog.info(msg);\r
+      }else if  (filename.equals("alarmCycle")) {\r
+        alarmCycle.info(msg);\r
+      }else if  (filename.equals("Battery")) {\r
+        Battery.info(msg);\r
+      }else {\r
+        Log.info(msg);\r
+      }\r
+    }\r
+  public static void logToFile(String filename,String msg){\r
+    if (filename.equals("Nmea")){\r
+      Nmea.info(msg);\r
+    }else if  (filename.equals("LBS")) {\r
+      LBS.info(msg);\r
+    }else if  (filename.equals("GPS")) {\r
+      GPS.info(msg);\r
+    }else if  (filename.equals("APILog")) {\r
+      APILog.info(msg);\r
+    }else if  (filename.equals("alarmCycle")) {\r
+      alarmCycle.info(msg);\r
+    }else if  (filename.equals("Battery")) {\r
+      Battery.info(msg);\r
+    }else {\r
+      Log.info(msg);\r
+    }\r
   }\r
-  public static void i(Object var0) {\r
-    if (DEBUG && var0 !=null) {\r
-      String var1 = getFunctionName();\r
-      if (var1 != null) {\r
-        StringBuilder sb = new StringBuilder();\r
-        sb.append(var1);\r
-        sb.append(" - ");\r
-        sb.append(var0.toString());\r
-        log("WatchService", sb.toString());\r
-        return;\r
+    private static  RollingFileAppender getRollingFileAppender(String name,String layoutpattern){\r
+      PatternLayout fileLayout = new PatternLayout(layoutpattern);\r
+      String filename=StorageUtils.getExternalStorageLogDir()+ File.separator + name+".txt";\r
+      RollingFileAppender rollingFileAppender= null;\r
+      try {\r
+        rollingFileAppender = new RollingFileAppender(fileLayout,filename);\r
+      } catch (IOException e) {\r
+        e.printStackTrace();\r
+        return null;\r
       }\r
+      rollingFileAppender.setName(name);\r
+      rollingFileAppender.setMaxBackupIndex(3);  //最多3个备份文件\r
+      rollingFileAppender.setMaximumFileSize(10*1024*1024); //10M 大小\r
+      rollingFileAppender.setImmediateFlush(true);\r
 \r
-      log("WatchService", var0.toString());\r
+      return rollingFileAppender;\r
     }\r
 \r
-  }\r
-  public static  void log(String TAG, String msg) {\r
-    if (DEBUG) {\r
-      Log.error(TAG+ " "+msg);\r
-//      originLog.warning(TAG+msg);\r
-//      if (CoreService.getInstance()!=null) {\r
-//        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(CoreService.getInstance().getRuntime().getCacheDir(), "logic", TAG + " " + msg);\r
-//      }\r
+    public static void v(String msg) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.debug(buildMessage(msg));\r
+    }\r
+\r
+    public static void v(String msg, Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.debug(buildMessage(msg), thr);\r
+    }\r
+\r
+    public static void d(String msg) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.debug(buildMessage(msg));\r
+    }\r
+\r
+    public static void d(String msg, Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.debug(buildMessage(msg), thr);\r
+    }\r
+\r
+    public static void i(String msg) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.info(buildMessage(msg));\r
     }\r
 \r
+    public static void i(String msg, Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.info(buildMessage(msg), thr);\r
+    }\r
 \r
+    public static void w(String msg) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.warn(buildMessage(msg));\r
+    }\r
+\r
+    public static void w(String msg, Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.warn(buildMessage(msg), thr);\r
+    }\r
+\r
+    public static void w(Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.warn(buildMessage(""), thr);\r
+    }\r
+\r
+    public static void e(String msg) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.error(buildMessage(msg));\r
+    }\r
+\r
+    public static void e(String msg, Throwable thr) {\r
+      initConfig();\r
+      if (Log!=null)\r
+        Log.error(buildMessage(msg), thr);\r
+    }\r
+\r
+    /**\r
+     * 生成消息\r
+     * @param msg\r
+     * @return\r
+     */\r
+    protected static String buildMessage(String msg) {\r
+      initConfig();\r
+      if (DEBUG && msg !=null) {\r
+        String var1 = getFunctionName();\r
+        if (var1 != null) {\r
+          StringBuilder sb = new StringBuilder();\r
+          sb.append(var1);\r
+          sb.append(" - ");\r
+          sb.append(msg);\r
+          return sb.toString();\r
+        }else{\r
+          return "msg is null";\r
+        }\r
+      }else{\r
+        return "msg is null";\r
+      }\r
+    }\r
+  public static  void log(String TAG, String msg) {\r
+    if (DEBUG) {\r
+      if (Log!=null)Log.debug(TAG+ " "+msg);\r
+\r
+    }\r
   }\r
 \r
   public static void log(String TAG,String funcName, String msg) {\r
     if (DEBUG) {\r
-      Log.error(TAG+ " [" + funcName + "]" + msg);\r
-//      originLog.warning(TAG+ "[" + funcName + "]" + msg);\r
-//      if (CoreService.getInstance()!=null) {\r
-//        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(CoreService.getInstance().getRuntime().getCacheDir(), "logic", TAG + " " + "[" + funcName + "]" + msg);\r
-//      }\r
+      if (Log!=null)\r
+        Log.debug(TAG + " [" + funcName + "]" + msg);\r
+\r
     }\r
   }\r
+\r
 }\r
 \r
index b19e086..583a7c3 100644 (file)
@@ -39,6 +39,18 @@ public final class StorageUtils {
        private StorageUtils() {
        }
 
+       public static String getExternalStorageLogDir() {
+
+               if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+                       File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/icprotocol");
+                       String path = dir.getPath();
+                       if (!dir.exists()) {
+                               dir.mkdirs();
+                       }
+                       return path;
+               }
+               return "/storage/emulated/0/Android/ic/icprotocol";
+       }
        /**
         * Returns application cache directory. Cache directory will be created on SD card
         * <i>("/Android/data/[app_package_name]/cache")</i> if card is mounted and app has appropriate permission. Else -
index 2a1c4c1..32a286a 100644 (file)
@@ -23,7 +23,7 @@
 
             <TextView
                 android:id="@+id/textViewVersion"
-                android:layout_width="60dp"
+                android:layout_width="80dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Version"
                 android:layout_width="80dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
-                android:text="ReCon" />
+                android:text="重启服务" />
 
             <Button
                 android:id="@+id/btn_tools"
                 android:layout_width="80dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
-                android:text="Tools" />
+                android:text="工具" />
         </LinearLayout>
 
         <HorizontalScrollView
index c262dc6..92fb4cc 100644 (file)
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="UploadLog" />\r
+            android:text="上传日志" />\r
 \r
         <Button\r
             android:id="@+id/btn_simReset"\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="SimReset" />\r
+            android:text="重置SIM" />\r
 \r
         <Button\r
             android:id="@+id/btn_sim2"\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="SIMRELoad" />\r
+            android:text="GPS状态" />\r
     </LinearLayout>\r
 \r
     <LinearLayout\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="Mode3" />\r
+            android:text="模式3" />\r
 \r
         <Button\r
             android:id="@+id/btn_location530"\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="Mode5.30" />\r
+            android:text="模式5.30" />\r
 \r
         <Button\r
             android:id="@+id/btn_location1"\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_weight="1"\r
-            android:text="Mode1" />\r
+            android:text="模式1" />\r
     </LinearLayout>\r
 \r
 </LinearLayout>
\ No newline at end of file