当前位置:首页 > JavaScript

js实现treelog

2026-02-01 05:54:49JavaScript

实现 TreeLog 的基本思路

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

定义 TreeLog 数据结构

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;
  }
}

添加缩进格式化输出

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

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:

js实现treelog

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

性能考虑

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

标签: jstreelog
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…