From 0f4f1da20898bb60462eede721eb8cf3eb783092 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 20 Nov 2018 22:00:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20console.trace(),=20console?= =?UTF-8?q?.time(),=20console.timeEnd()=20=E6=96=B0=E5=A2=9E=20console.set?= =?UTF-8?q?GlobalLogConfig()=E6=94=AF=E6=8C=81=E4=BF=9D=E5=AD=98=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes autojs/build.gradle | 3 + autojs/src/main/assets/modules/__console__.js | 57 +++++++++++++++--- .../core/console/GlobalStardustConsole.java | 28 ++++++++- .../autojs/core/console/StardustConsole.java | 1 + .../stardust/autojs/runtime/api/Console.java | 1 + 6 files changed, 79 insertions(+), 11 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index a21e99caaf952e7df59509bf41eb1fdb72ff2e19..97259e67fd9a1f65322f3995b3607fc453c4f6d6 100644 GIT binary patch delta 37 tcmcc1dY5&=bk=l3&!t=&=P)q|6tN46wW|fTve}zSU0b1dZ}K`OeE{%#43+=@ delta 37 vcmV+=0NVfE1>FUZmj!10<;$S4oB{$6T6=28-qN-MdZgd-9OQ&Nldb|UWsee+ diff --git a/autojs/build.gradle b/autojs/build.gradle index f2f46717..e6ccc07f 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -57,6 +57,9 @@ dependencies { api 'com.github.Stericson:RootShell:1.6' // Gson api 'com.google.code.gson:gson:2.8.2' + // log4j + api group: 'de.mindpipe.android', name: 'android-logging-log4j', version: '1.0.3' + api group: 'log4j', name: 'log4j', version: '1.2.17' // Terminal emulator api(name: 'libtermexec-release', ext: 'aar') api(name: 'emulatorview-release', ext: 'aar') diff --git a/autojs/src/main/assets/modules/__console__.js b/autojs/src/main/assets/modules/__console__.js index e007c093..3b452a63 100644 --- a/autojs/src/main/assets/modules/__console__.js +++ b/autojs/src/main/assets/modules/__console__.js @@ -1,43 +1,82 @@ -module.exports = function(__runtime__, scope){ +module.exports = function (__runtime__, scope) { var rtConsole = __runtime__.console; var console = {}; - console.assert = function(value, message){ + console.assert = function (value, message) { message = message || ""; rtConsole.assertTrue(value, message); } console.rawInput = rtConsole.rawInput.bind(rtConsole); - console.input = function(data, param){ + console.input = function (data, param) { return eval(console.rawInput.call(console, [].slice(arguments)) + ""); } - console.log = function(){ + console.log = function () { rtConsole.log(util.format.apply(util, arguments)); } - console.verbose = function(){ + console.verbose = function () { rtConsole.verbose(util.format.apply(util, arguments)); } - console.print = function(){ + console.print = function () { rtConsole.print(android.util.Log.DEBUG, util.format.apply(util, arguments)); } - console.info = function(){ + console.info = function () { rtConsole.info(util.format.apply(util, arguments)); } - console.warn = function(){ + console.warn = function () { rtConsole.warn(util.format.apply(util, arguments)); } - console.error = function(){ + console.error = function () { rtConsole.error(util.format.apply(util, arguments)); } + var timers = {}, ascu = android.os.SystemClock.uptimeMillis; + console.time = console.time || function (label) { + label = label || "default"; + timers[label] = ascu(); + } + + console.timeEnd = console.timeEnd || function (label) { + label = label || "default"; + var result = ascu() - timers[label]; + delete timers[label]; + console.log(label + ": " + result + "ms"); + } + + console.trace = console.trace || function captureStack(message) { + var k = {}; + Error.captureStackTrace(k, captureStack); + console.log(util.format.apply(util, arguments) + "\n" + k.stack); + }; + + console.setGlobalLogConfig = function (config) { + let logConfigurator = new Packages["de.mindpipe.android.logging.log4j"].LogConfigurator(); + if (config.file) { + logConfigurator.setFileName(files.path(config.file)); + logConfigurator.setUseFileAppender(true); + } + logConfigurator.setFilePattern(option(config.filePattern, "%m%n")) + logConfigurator.setMaxFileSize(option(config.maxFileSize, 512 * 1024)); + logConfigurator.setImmediateFlush(option(config.immediateFlush, true)); + let rootLevel = option(config.rootLevel, "ALL"); + logConfigurator.setRootLevel(org.apache.log4j.Level[rootLevel.toUpperCase()]); + logConfigurator.setMaxBackupSize(option(config.maxBackupSize, 5)); + logConfigurator.setResetConfiguration(option(config.resetConfiguration, true)); + logConfigurator.configure(); + } + + function option(value, def) { + return value == undefined ? def : value; + } + console.show = rtConsole.show.bind(rtConsole); console.hide = rtConsole.hide.bind(rtConsole); console.clear = rtConsole.clear.bind(rtConsole); diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java index 5ae5e7df..3ae3d16b 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java @@ -1,19 +1,24 @@ package com.stardust.autojs.core.console; -import android.util.SparseArray; - import com.stardust.util.UiHandler; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.Priority; + import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import de.mindpipe.android.logging.log4j.LogConfigurator; + /** * Created by Stardust on 2017/10/22. */ public class GlobalStardustConsole extends StardustConsole { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()); + private static final Logger LOGGER = Logger.getLogger(GlobalStardustConsole.class); public GlobalStardustConsole(UiHandler uiHandler) { super(uiHandler); @@ -23,10 +28,29 @@ public class GlobalStardustConsole extends StardustConsole { public String println(int level, CharSequence charSequence) { String log = String.format(Locale.getDefault(), "%s/%s: %s", DATE_FORMAT.format(new Date()), getLevelChar(level), charSequence.toString()); + LOGGER.log(toLog4jLevel(level), log); super.println(level, log); return log; } + private Priority toLog4jLevel(int level) { + switch (level) { + case android.util.Log.VERBOSE: + return Level.DEBUG; + case android.util.Log.DEBUG: + return Level.DEBUG; + case android.util.Log.INFO: + return Level.INFO; + case android.util.Log.WARN: + return Level.WARN; + case android.util.Log.ERROR: + return Level.ERROR; + case android.util.Log.ASSERT: + return Level.FATAL; + } + throw new IllegalArgumentException("invalid level = " + level); + } + private String getLevelChar(int level) { switch (level) { case android.util.Log.VERBOSE: diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java index ca388309..1f5a7e50 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java @@ -213,6 +213,7 @@ public class StardustConsole extends AbstractConsole { }); } + public void setSize(int w, int h) { if (mShown) { mUiHandler.post(() -> { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java index c876f595..3a1c5fe1 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java @@ -43,4 +43,5 @@ public interface Console { String println(int level, CharSequence charSequence); void setTitle(CharSequence title); + }