YYPOST群发软件 发表于 6 天前

AIWROK 日志打印方法完整集合

AIWROK 日志打印方法完整集合






/**
* AIWROK 日志打印方法完整集合
* 包含所有日志输出、调试、计时相关方法,含完整案例演示
*/

// ======================== 工具函数 ========================

/**
* 倒计时(秒)
*/
function countdown(seconds) {
    for (var i = seconds; i >= 1; i--) {
      printl("⏳ " + i + " 秒后开始下一个演示...");
      sleep.millisecond(1000);
    }
    printl("▶ 开始!");
}

/**
* 分隔线
*/
function divider(title) {
    printl("");
    printl("================================================");
    printl("" + title);
    printl("================================================");
}

// ======================== 1. printl 基础输出 ========================

/**
* printl - 输出日志信息到控制台
* 方法签名: void printl(Object... args)
* 支持多个参数,自动用空格分隔
*/
function demo_printl() {
    printl("[案例] printl 基础输出");
    printl("直接输出字符串");
    var x = 100, y = 200;
    printl("多参数:", x, y);
    var token = "abc123";
    printl("Token:", token);
    var data = {name: "test", value: 100};
    printl("对象:", data);
    printl("计算:", 100 + 200);
}

// ======================== 2. print.log 普通日志 ========================

/**
* print.log - 输出普通日志信息
* 方法签名: void print.log(Object arg0)
*/
function demo_printLog() {
    printl("[案例] print.log 普通日志");
    print.log("这是一条普通日志内容");
    print.log({key: "value", info: "示例对象"});
}

// ======================== 3. print.err 错误日志 ========================

/**
* print.err - 输出错误信息
* 方法签名: void print.err(Object arg0)
*/
function demo_printErr() {
    printl("[案例] print.err 错误日志");
    print.err("操作执行失败");
    print.err({code: 500, message: "服务器内部错误"});
}

// ======================== 4. print.warn 警告日志 ========================

/**
* print.warn - 输出警告信息
* 方法签名: void print.warn(Object arg0)
*/
function demo_printWarn() {
    printl("[案例] print.warn 警告日志");
    print.warn("这是一条需要关注的警告信息");
    print.warn({code: 201, tip: "资源即将耗尽"});
}

// ======================== 5. print.time/timeEnd 计时 ========================

/**
* print.time - 启动计时
* print.timeEnd - 结束计时并返回时长(毫秒)
*/
function demo_printTime() {
    printl("[案例] print.time / print.timeEnd 计时功能");
    print.time();
    var result = 0;
    for (var i = 0; i < 10000; i++) {
      result += i;
    }
    var costTime = print.timeEnd();
    printl("循环10000次累加,耗时: " + costTime + " 毫秒");
    printl("计算结果: " + result);
}

// ======================== 6. logWindow 日志窗口控制 ========================

/**
* logWindow 全套方法演示
*/
function demo_logWindow() {
    printl("[案例] logWindow 日志窗口控制");

    // 设置窗口位置和大小
    logWindow.setPosition(0, 0);
    printl("setPosition(0, 0) - 设置窗口位置");

    logWindow.setWidth(screen.getScreenWidth());
    printl("setWidth(" + screen.getScreenWidth() + ") - 设置窗口宽度");

    logWindow.setHeight(300);
    printl("setHeight(300) - 设置窗口高度");

    // 设置样式
    logWindow.setSize(14);
    printl("setSize(14) - 设置字体大小");

    logWindow.setColor("#FFFFFF");
    printl("setColor(#FFFFFF) - 设置字体颜色");

    logWindow.setAlpha(0.8);
    printl("setAlpha(0.8) - 设置透明度");

    // 设置模式
    logWindow.showModel(0);
    printl("showModel(0) - 显示全部日志");

    logWindow.setClickModel();
    printl("setClickModel() - 设置可点击模式");

    logWindow.clear();
    printl("clear() - 清空日志内容");
}

// ======================== 7. 自定义日志封装 ========================

/**
* 带时间戳的日志
*/
function logWithTime(msg) {
    var now = new Date();
    var timeStr = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
    printl("[" + timeStr + "] " + msg);
}

/**
* 带级别的日志
*/
function logInfo(msg) {
    printl(" " + msg);
}

function logWarn(msg) {
    print.warn(" " + msg);
}

function logError(msg) {
    print.err(" " + msg);
}

/**
* 带函数名的日志
*/
function logWithFunc(funcName, msg) {
    printl("[" + funcName + "] " + msg);
}

function demo_customLog() {
    printl("[案例] 自定义日志封装");
    logWithTime("带时间戳的日志");
    logInfo("这是一条信息日志");
    logWarn("这是一条警告日志");
    logError("这是一条错误日志");
    logWithFunc("main", "带函数名的日志");
}

// ======================== 8. 错误捕获日志 ========================

/**
* 带错误捕获的日志
*/
function safeExecute(func) {
    try {
      func();
    } catch (e) {
      print.err("执行出错: " + e.message);
    }
}

function demo_safeExecute() {
    printl("[案例] 错误捕获日志");
    safeExecute(function() {
      var result = 100 / 0;
      printl("结果: " + result);
    });
    safeExecute(function() {
      var obj = null;
      obj.toString();
    });
}

// ======================== 9. 调试输出技巧 ========================

/**
* 输出数组内容
*/
function logArray(arr) {
    printl("数组长度: " + arr.length);
    for (var i = 0; i < arr.length; i++) {
      printl("    [" + i + "] = " + arr);
    }
}

/**
* 输出对象属性
*/
function logObject(obj) {
    printl("对象属性:");
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
            printl("    " + key + " = " + obj);
      }
    }
}

/**
* 条件日志输出
*/
function logIf(condition, msg) {
    if (condition) {
      printl("" + msg);
    }
}

function demo_debugTips() {
    printl("[案例] 调试输出技巧");

    printl("--- 输出数组 ---");
    logArray();

    printl("--- 输出对象 ---");
    logObject({name: "test", age: 25, city: "北京"});

    printl("--- 条件输出 ---");
    var debugMode = true;
    logIf(debugMode, "调试模式已开启");
    logIf(!debugMode, "调试模式已关闭(不会显示)");
}

// ======================== 10. 日志分级系统 ========================

var LOG_LEVEL = {
    DEBUG: 0,
    INFO: 1,
    WARN: 2,
    ERROR: 3
};

var currentLogLevel = LOG_LEVEL.DEBUG;

function setLogLevel(level) {
    currentLogLevel = level;
}

function log(level, msg) {
    if (level >= currentLogLevel) {
      switch (level) {
            case LOG_LEVEL.DEBUG:
                printl(" " + msg);
                break;
            case LOG_LEVEL.INFO:
                printl(" " + msg);
                break;
            case LOG_LEVEL.WARN:
                print.warn(" " + msg);
                break;
            case LOG_LEVEL.ERROR:
                print.err(" " + msg);
                break;
      }
    }
}

function demo_logLevel() {
    printl("[案例] 日志分级系统");

    printl("--- 级别: DEBUG(全部显示)---");
    setLogLevel(LOG_LEVEL.DEBUG);
    log(LOG_LEVEL.DEBUG, "DEBUG 消息");
    log(LOG_LEVEL.INFO, "INFO 消息");
    log(LOG_LEVEL.WARN, "WARN 消息");
    log(LOG_LEVEL.ERROR, "ERROR 消息");

    printl("--- 级别: WARN(只显示 WARN 和 ERROR)---");
    setLogLevel(LOG_LEVEL.WARN);
    log(LOG_LEVEL.DEBUG, "DEBUG 消息(不显示)");
    log(LOG_LEVEL.INFO, "INFO 消息(不显示)");
    log(LOG_LEVEL.WARN, "WARN 消息");
    log(LOG_LEVEL.ERROR, "ERROR 消息");

    // 恢复 DEBUG 级别
    setLogLevel(LOG_LEVEL.DEBUG);
}

// ======================== 11. 文件日志 ========================

/**
* 输出日志到文件
*/
function logToFile(filePath, msg) {
    var now = new Date();
    var timeStr = now.getFullYear() + "-" +
                  (now.getMonth() + 1) + "-" +
                  now.getDate() + " " +
                  now.getHours() + ":" +
                  now.getMinutes() + ":" +
                  now.getSeconds();
   
    var logMsg = "[" + timeStr + "] " + msg + "\n";
   
    try {
      importClass(java.io.FileWriter);
      var fw = new java.io.FileWriter(filePath, true);
      fw.write(logMsg);
      fw.close();
    } catch (e) {
      printl(" 写入日志文件失败: " + e.message);
    }
   
    printl("" + logMsg.replace("\n", ""));
}

function demo_logToFile() {
    printl("[案例] 文件日志输出");
    var logPath = "/sdcard/app.log";
    logToFile(logPath, "应用启动");
    logToFile(logPath, "用户登录成功");
    logToFile(logPath, "执行任务完成");
    printl("日志已写入: " + logPath);
}

// ======================== 12. 性能测试 ========================

function demo_performance() {
    printl("[案例] 性能测试 - 截图耗时统计");
    print.time();
    var totalTime = 0;
    for (var i = 0; i < 5; i++) {
      var t1 = java.lang.System.currentTimeMillis();
      var img = screen.screenShotFull();
      img.recycle();
      var t2 = java.lang.System.currentTimeMillis();
      var cost = t2 - t1;
      totalTime += cost;
      printl("第" + (i + 1) + "次截图: " + cost + " ms");
    }
    var totalCost = print.timeEnd();
    printl("5次截图总耗时: " + totalCost + " ms");
    printl("平均每次: " + Math.round(totalCost / 5) + " ms");
}


// ============================================================
//                  全部功能案例演示
// ============================================================

function demo() {
    printl("");
    printl("╔══════════════════════════════════════════════╗");
    printl("║   AIWROK 日志打印方法集 - 全部演示         ║");
    printl("║          共 12 个功能,逐个演示            ║");
    printl("╚══════════════════════════════════════════════╝");

    // ---- 演示 1: printl 基础输出 ----
    divider("演示 1/12: printl 基础输出");
    demo_printl();
    countdown(2);

    // ---- 演示 2: print.log 普通日志 ----
    divider("演示 2/12: print.log 普通日志");
    demo_printLog();
    countdown(2);

    // ---- 演示 3: print.err 错误日志 ----
    divider("演示 3/12: print.err 错误日志");
    demo_printErr();
    countdown(2);

    // ---- 演示 4: print.warn 警告日志 ----
    divider("演示 4/12: print.warn 警告日志");
    demo_printWarn();
    countdown(2);

    // ---- 演示 5: print.time/timeEnd 计时 ----
    divider("演示 5/12: print.time / print.timeEnd 计时");
    demo_printTime();
    countdown(2);

    // ---- 演示 6: logWindow 日志窗口 ----
    divider("演示 6/12: logWindow 日志窗口控制");
    demo_logWindow();
    countdown(2);

    // ---- 演示 7: 自定义日志封装 ----
    divider("演示 7/12: 自定义日志封装");
    demo_customLog();
    countdown(2);

    // ---- 演示 8: 错误捕获日志 ----
    divider("演示 8/12: 错误捕获日志");
    demo_safeExecute();
    countdown(2);

    // ---- 演示 9: 调试输出技巧 ----
    divider("演示 9/12: 调试输出技巧");
    demo_debugTips();
    countdown(2);

    // ---- 演示 10: 日志分级系统 ----
    divider("演示 10/12: 日志分级系统");
    demo_logLevel();
    countdown(2);

    // ---- 演示 11: 文件日志 ----
    divider("演示 11/12: 文件日志输出");
    demo_logToFile();
    countdown(2);

    // ---- 演示 12: 性能测试 ----
    divider("演示 12/12: 性能测试");
    demo_performance();

    // ---- 总结 ----
    printl("");
    printl("╔══════════════════════════════════════════════╗");
    printl("║            全部 12 个演示完成!             ║");
    printl("╠══════════════════════════════════════════════╣");
    printl("║ 1.printl            基础日志输出         ║");
    printl("║ 2.print.log         普通日志               ║");
    printl("║ 3.print.err         错误日志               ║");
    printl("║ 4.print.warn      警告日志               ║");
    printl("║ 5.print.time      计时功能               ║");
    printl("║ 6.logWindow         日志窗口控制         ║");
    printl("║ 7.自定义封装      带时间戳/级别/函数名   ║");
    printl("║ 8.safeExecute       错误捕获日志         ║");
    printl("║ 9.调试技巧          数组/对象/条件输出   ║");
    printl("║ 10. 日志分级          DEBUG/INFO/WARN/ERROR║");
    printl("║ 11. logToFile         文件日志输出         ║");
    printl("║ 12. 性能测试          截图耗时统计         ║");
    printl("╚══════════════════════════════════════════════╝");
}

// 直接运行演示
demo();


页: [1]
查看完整版本: AIWROK 日志打印方法完整集合