autojs控制台只显示指定级别的日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 牙叔教程 简单易学

牙叔教程 简单易学


使用场景

控制台只显示指定级别的日志

但是日志文件里面显示所有日志


效果展示


autojs版本

8.7.7-0


get知识点

  1. 停止其他脚本
  2. 导入java类
  3. 获取控制台实例
  4. 获取日志实例
  5. 隐藏控制台输入框和按钮
  6. 遍历控制台view
  7. 重写控制台adapter
  8. 自定义控制台recycleView的布局
  9. 日志级别
  10. 退出事件
  11. 设置控制台大小和位置


原理

查看autojs开源代码, 可知日志构造函数如下

public LogEntry(int id, int level, CharSequence content) {
  this.id = id;
  this.level = level;
  this.content = content;
  this.content = content;
}


日志实体是有level属性的, 我们可以根据不同的level, 决定是否显示;

更进一步的话, 可以根据不同的level, 进行不同的显示, 比如不同的背景, 不同的字体颜色,  大小 等

其中, 最难的一步是获取日志数据, 这个需要反射, 相信对会java的同学, 信手拈来


代码讲解


1. 停止其他脚本
engines.all().map((ScriptEngine) => {
  if (engines.myEngine().toString() !== ScriptEngine.toString()) {
    ScriptEngine.forceStop();
  }
});


2.导入java类

importClass(Packages.androidx.recyclerview.widget.RecyclerView);
importClass(Packages.androidx.recyclerview.widget.LinearLayoutManager);
importClass(android.graphics.drawable.BitmapDrawable);
importClass(Packages.androidx.recyclerview.widget.DividerItemDecoration);
importClass(android.graphics.BitmapFactory);
importClass(android.graphics.Paint);
importClass(android.graphics.Color);
importClass(android.widget.LinearLayout);


3. 获取控制台需要处理的view
let mConsoleView = getConsoleWindow();
let parent = mConsoleView.parent;
var inputView = parent.findViewById(context.getResources().getIdentifier("input", "id", context.getPackageName()));
var buttonView = parent.findViewById(context.getResources().getIdentifier("submit", "id", context.getPackageName()));
var consoleView = parent.findViewById(context.getResources().getIdentifier("console", "id", context.getPackageName()));


4. 隐藏输入框和按钮
ui.run(function () {
  inputView.setVisibility(8);
  buttonView.setVisibility(8);
});


5. 获取控制台悬浮窗实例
function getConsoleWindow() {
  var mConsole = runtime.console;
  let field = mConsole.class.superclass.getDeclaredField("mConsoleFloaty");
  field.setAccessible(true);
  mConsoleFloaty = field.get(mConsole);
  mConsoleView = mConsoleFloaty.getExpandedView();
  return mConsoleView;
}


6. 修改控制台标题
let r = filterView(mConsoleView);
function filterView(view, arr) {
  arr = arr || [];
  if (view instanceof android.view.ViewGroup) {
    arr.push(view);
    let childCount = view.childCount;
    for (var i = 0; i < childCount; i++) {
      let chileView = view.getChildAt(i);
      filterView(chileView, arr);
    }
  } else {
    arr.push(view);
  }
  return arr;
}


7. 修改控制台标题
r[3].setText("牙叔教程 简单易学");


8. 控制台recycleview的子布局
let boxXml = (
  <TextView
    id="content"
    layout_width="match_parent"
    layout_height="wrap_content"
    textIsSelectable="true"
    textSize="19sp"
    margin="6"
  ></TextView>
);


9. 重写控制台adapter
ui.run(function () {
  let recycleview = r[num];
  function createAdapter(mLogEntries) {
    return RecyclerView.Adapter({
      onCreateViewHolder: function (parent, viewType) {
        // 视图创建
        let view;
        let holder;
        view = ui.inflate(boxXml, parent, false);
        holder = JavaAdapter(RecyclerView.ViewHolder, {}, view);
        return holder;
      },
      onBindViewHolder: function (holder, position) {
        // 数据绑定
        let logEntry = mLogEntries.get(position);
        holder.itemView.setTextColor(colors.parseColor("#0000ff"));
        holder.itemView.setText(logEntry.content);
        let level = 5;
        显示指定级别的日志(logEntry, holder, level);
      },
      getItemCount: function () {
        return mLogEntries.size();
      },
    });
  }
  let newAdapter = createAdapter(mLogEntries);
  recycleview.setAdapter(newAdapter);
});


10. 日志级别
static final SparseArray<Integer> COLORS = new SparseArrayEntries<Integer>()
.entry(Log.VERBOSE, 0xdfc0c0c0)  2
.entry(Log.DEBUG, 0xdfffffff)  3  log
.entry(Log.INFO, 0xff64dd17)  4
.entry(Log.WARN, 0xff2962ff)   5
.entry(Log.ERROR, 0xffd50000)  6
.sparseArray();


声明


部分内容来自网络

本教程仅用于学习, 禁止用于其他用途




相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
SQL IDE Java
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
2658 0
|
7月前
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
1276 16
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
301 7
IntelliJ IDEA 解决控制台不能显示日志
IntelliJ IDEA 解决控制台不能显示日志
1548 0
|
JavaScript 前端开发 开发者
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
483 1
|
iOS开发
XCode控制台调试无法看到函数跟踪或无法看到输出的日志问题及解决方案
XCode控制台调试无法看到函数跟踪或无法看到输出的日志问题及解决方案
852 0
|
SQL 关系型数据库 MySQL
如何将完整的sql打在控制台和日志上
如何将完整的sql打在控制台和日志上
177 0
|
Java 应用服务中间件
解决IDEA tomcat控制台只有server日志
请注意,确保在调试或开发阶段使用更详细的日志级别(如 `DEBUG`或 `TRACE`),但在生产环境中应将其设置为更高的级别以减少日志量。
599 0
|
测试技术 Python
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
977 1
IntelliJ IDEA 控制台如何修改不同级别的日志颜色
IntelliJ IDEA 控制台如何修改不同级别的日志颜色
1694 0

热门文章

最新文章