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