运维APP增加日志

serial
Matthew 1 year ago
parent 7617e505cb
commit eaf76e9f7d

@ -672,7 +672,7 @@ public class AppMaster {
if (dl.download(url, apkPath)) {
sendResult(cid, 1, action, action + ":" + mCmdid);
Context context = mService.getApplicationContext();
Log.i(TAG, "Upgrade APP: " + url);
mService.logger.info("Upgrade APP: " + url);
SysApi.installApk(context, apkPath, context.getPackageName(), true);
}

@ -0,0 +1,57 @@
package com.xypower.mpmaster;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class LogFormatter extends Formatter {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
static String getLevelName(Level level) {
int levelInt = level.intValue();
if (levelInt >= 1000) {
return "E";
} else if (levelInt >= 900) {
return "W";
} else if (levelInt >= 700) {
return "I";
} else if (levelInt >= 500) {
return "D";
} else {
return "V";
}
}
@Override
public String format(LogRecord record) {
String message = formatMessage(record);
return String.format(sdf.format(new Date(record.getMillis())) + " [%s] %s\n",
// ecord.
getLevelName(record.getLevel()), message);
}
/**
* {@link LogFormatter}{@link Logger}
* @param logger
* @return always logger
*/
public static Logger installFormatter(Logger logger){
if(null != logger){
/** 禁用原输出handler,否则会输出两次 */
logger.setUseParentHandlers(false);
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(new LogFormatter());
logger.addHandler(consoleHandler);
}
return logger;
}
}

@ -0,0 +1,100 @@
package com.xypower.mpmaster;
import android.util.Log;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
public class LogcatHandler extends Handler {
private static final int TAG_MAX_LENGTH = 23;
static String getLevelName(int level) {
switch (level) {
case 1:
return "VERY VERBOSE";
case Log.VERBOSE:
return "VERBOSE";
case Log.DEBUG:
return "DEBUG";
case Log.INFO:
return "INFO";
case Log.WARN:
return "WARN";
case Log.ERROR:
return "ERROR";
case Log.ASSERT:
return "ASSERT";
default:
return "UNKNOWN";
}
}
static int levelFromLevel(Level level) {
int levelInt = level.intValue();
if (levelInt >= 1000) {
return Log.ERROR;
} else if (levelInt >= 900) {
return Log.WARN;
} else if (levelInt >= 700) {
return Log.INFO;
} else if (levelInt >= 500) {
return Log.DEBUG;
} else {
return Log.VERBOSE;
}
}
static Level levelFromLevel(int level) {
switch (level) {
case 1:
return Level.FINEST;
case Log.VERBOSE:
return Level.FINER;
case Log.DEBUG:
return Level.FINE;
case Log.INFO:
return Level.INFO;
case Log.WARN:
return Level.WARNING;
case Log.ERROR:
return Level.SEVERE;
case Log.ASSERT:
return Level.SEVERE;
default:
return Level.FINE;
}
}
@Override public void publish(LogRecord record) {
if (record == null || !super.isLoggable(record)) {
return;
}
String tag = tagFromLoggerName(record.getLoggerName());
int level = levelFromLevel(record.getLevel());
Log.println(level, tag, record.getMessage());
if (record.getThrown() != null) {
Log.println(level, tag, Log.getStackTraceString(record.getThrown()));
}
}
@Override public void flush() {}
@Override public void close() throws SecurityException {}
private String tagFromLoggerName(String name) {
if (name == null) {
return "";
}
if (name.length() > TAG_MAX_LENGTH) {
return name.substring(name.length() - TAG_MAX_LENGTH, name.length());
} else {
return name;
}
}
}

@ -47,6 +47,8 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MpMasterService extends Service {
@ -56,6 +58,8 @@ public class MpMasterService extends Service {
public static final String TAG = "MpMaster";
public Logger logger;
public final static int MSG_WHAT_SENDING_HB = 40;
public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 8466503;
public static final String ACTION_MSG_BROADCAST = "ACT_MSG_BROADCAST";
@ -124,6 +128,38 @@ public class MpMasterService extends Service {
loadConfig();
logger = Logger.getLogger("com.xypower.mpmaster.logger");
logger.setLevel(Level.ALL);
// LogFormatter.installFormatter(logger);
LogFormatter logFormatter = new LogFormatter();
if (BuildConfig.DEBUG) {
LogcatHandler logcatHandler = new LogcatHandler();
logcatHandler.setFormatter(logFormatter);
logger.addHandler(logcatHandler);
}
FileHandler fileHandler = null;
try {
String appPath = MicroPhotoContext.buildMasterAppDir(getApplicationContext());
String logPath = appPath + "logs";
File fi = new File(logPath);
if (!fi.exists()) {
fi.mkdirs();
}
File logFile = new File(fi, "log.txt");
fileHandler = new FileHandler(logFile.getAbsolutePath(), true);//true表示日志内容在文件中追加
fileHandler.setLevel(Level.ALL);//级别为ALL记录所有消息
fileHandler.setFormatter(logFormatter);
logger.addHandler(fileHandler);
} catch (Throwable e) {
System.out.println("创建文件失败!" + e.getMessage());
}
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mSerialNo = Build.getSerial();
@ -144,6 +180,8 @@ public class MpMasterService extends Service {
}
mMpAppVersion = packageInfo == null ? "" : packageInfo.versionName;
logger.info("MpMaster started version=" + mMpMasterVersion);
mHander = new ServiceHandler();
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
@ -187,7 +225,7 @@ public class MpMasterService extends Service {
mStateService = STATE_SERVICE.NOT_CONNECTED;
Log.w(TAG, "MicroPhotoService::onDestroy called");
logger.warning("MicroPhotoService::onDestroy called");
unregisterReceiver(mAlarmReceiver);
unregisterReceiver(mScreenaAtionReceiver);
@ -256,7 +294,7 @@ public class MpMasterService extends Service {
}
if ((ts - modifiedTimeOfDb) > mTimeOfMpAppAlive) {
// greater than 30m
// Logger.
logger.warning("Start MpAPP as it is NOT running");
MicroPhotoContext.restartMpApp(context);
mTimeToStartMpApp = ts;
}
@ -295,6 +333,10 @@ public class MpMasterService extends Service {
return mSerialNo;
}
static String convertSwitch(boolean swtch) {
return swtch ? "ON" : "OFF";
}
public void setMntnMode(boolean mntnMode, boolean quickHbMode) {
boolean oldMntnMode = mMntnMode;
boolean oldQuickHbMode = mQuickHbMode;
@ -309,6 +351,9 @@ public class MpMasterService extends Service {
masterConfig.quickHbMode = quickHbMode ? 1 : 0;
MicroPhotoContext.saveMasterConfig(getApplicationContext(), masterConfig);
logger.warning("MNTN Mode Changed from " + convertSwitch(oldMntnMode) + " to " + convertSwitch(mntnMode)
+ " QuickHB from" + convertSwitch(oldQuickHbMode) + " to " + convertSwitch(quickHbMode));
}
if (oldQuickHbMode != quickHbMode) {
@ -331,6 +376,8 @@ public class MpMasterService extends Service {
MicroPhotoContext.AppConfig appConfig = MicroPhotoContext.getMpAppConfig(getApplicationContext());
logger.warning("Start Mntn report:" + masterUrl);
AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid);
appMaster.start();
}
@ -346,7 +393,7 @@ public class MpMasterService extends Service {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (TextUtils.equals(ACTION_HEARTBEAT, action)) {
Log.i(TAG, "HB Timer Fired ACTION=" + action);
mService.logger.info("HB Timer Fired ACTION=" + action);
mService.registerHeartbeatTimer();
@ -355,7 +402,7 @@ public class MpMasterService extends Service {
} else if (TextUtils.equals(ACTION_UPDATE_CONFIGS, action)) {
int restart = intent.getIntExtra("restart", 0);
Log.i(TAG, "UPD CFG Fired ACTION=" + action + " restart=" + restart);
mService.logger.info("UPD CFG Fired ACTION=" + action + " restart=" + restart);
if (restart != 0) {
mService.restartApp(context, context.getPackageName());
} else {
@ -391,35 +438,6 @@ public class MpMasterService extends Service {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + timeout * 1000, pendingIntent);
}
private static void registerPhotoTimer(Context context, int channel, int preset, long ts, long timeout, List<Long> schedules) {
// 创建延迟意图
Intent alarmIntent = new Intent();
alarmIntent.setAction(ACTION_TAKE_PHOTO);
int cnt = schedules.size();
alarmIntent.putExtra(EXTRA_PARAM_SCHEDULES, cnt);
String channelStr = "";
for (int idx = 0; idx < cnt; idx++) {
long val = schedules.get(idx).longValue();
alarmIntent.putExtra(EXTRA_PARAM_SCHEDULE + idx, schedules.get(idx).longValue());
channelStr += "CH=" + ((val & 0XFF0000) >> 16) + "-PR=" + ((val & 0XFF00) >> 8) + " ";
}
alarmIntent.putExtra(EXTRA_PARAM_TIME, ts);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
long currentTimeMillis = System.currentTimeMillis();
Date date = new Date(currentTimeMillis + timeout);
String dateStr = (String) DateFormat.format("MM-dd kk:mm:ss", date);
Log.d(TAG, "PhotoTimer Reg: " + dateStr + " currentTimeMillis=" + currentTimeMillis + " timeout=" + timeout + " Channels=" + channelStr);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeout, pendingIntent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
@ -738,7 +756,6 @@ public class MpMasterService extends Service {
SysApi.selectSimCard4Data(getApplicationContext(), num);
}
public native static int getInt(int cmd);
public native static int[] getStats(long ts);

Loading…
Cancel
Save