当前位置:首页 > JavaScript

js实现treelog

2026-02-01 05:54:49JavaScript

实现 TreeLog 的基本思路

TreeLog 是一种树形结构的日志记录方式,通常用于展示层级化的日志信息。在 JavaScript 中可以通过递归或迭代的方式实现。

定义 TreeLog 数据结构

TreeLog 通常包含节点信息和子节点列表。以下是一个简单的数据结构定义:

js实现treelog

class TreeNode {
  constructor(message, level = 0) {
    this.message = message;
    this.level = level;
    this.children = [];
  }

  addChild(node) {
    this.children.push(node);
  }
}

实现日志收集功能

创建一个 TreeLog 类来管理整个树形日志:

class TreeLog {
  constructor() {
    this.root = new TreeNode('Root');
    this.currentNode = this.root;
  }

  log(message) {
    const newNode = new TreeNode(message, this.currentNode.level + 1);
    this.currentNode.addChild(newNode);
    this.currentNode = newNode;
    return this;
  }

  end() {
    if (this.currentNode !== this.root) {
      this.currentNode = this.currentNode.parent || this.root;
    }
    return this;
  }
}

添加缩进格式化输出

为了使日志输出更具可读性,可以添加格式化方法:

js实现treelog

class TreeNode {
  // ... 之前的代码

  toString(indent = 0) {
    let result = '  '.repeat(indent) + `- ${this.message}\n`;
    for (const child of this.children) {
      result += child.toString(indent + 1);
    }
    return result;
  }
}

class TreeLog {
  // ... 之前的代码

  toString() {
    return this.root.toString();
  }
}

使用示例

const logger = new TreeLog();
logger.log('Start process')
  .log('Step 1')
    .log('Substep 1.1').end()
    .log('Substep 1.2').end()
  .end()
  .log('Step 2');

console.log(logger.toString());

高级功能扩展

可以添加时间戳、日志级别等额外信息:

class TreeNode {
  constructor(message, level = 0, timestamp = new Date()) {
    this.message = message;
    this.level = level;
    this.timestamp = timestamp;
    this.children = [];
  }

  // ... 其他方法
}

浏览器控制台友好输出

对于浏览器环境,可以重写 toString 方法使用 console.group:

class TreeNode {
  printToConsole() {
    console.group(`${this.message} (${this.timestamp.toISOString()})`);
    this.children.forEach(child => child.printToConsole());
    console.groupEnd();
  }
}

性能考虑

对于大量日志,可以考虑使用懒加载或分块渲染技术,避免一次性处理过多节点导致性能问题。

标签: jstreelog
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…