Rust Deno运行时控制台插件deno_console的使用,实现高效日志输出与调试功能

Rust Deno运行时控制台插件deno_console的使用,实现高效日志输出与调试功能

简介

deno_console 是一个实现了 Console API 的 Rust crate,遵循 Console API 规范。

使用示例

从 JavaScript 中,包含扩展的源文件,并将 console 分配给全局作用域:

import * as console from "ext:deno_console/01_console.js";
Object.defineProperty(globalThis, "console", {
  value: new console.Console((msg, level) =>
    globalThis.Deno.core.print(msg, level > 1)
  ),
  enumerable: false,
  configurable: true,
  writable: true,
});

然后从 Rust 中,在 RuntimeOptions 的 extensions 字段中提供 deno_console::deno_console::init()

提供的操作

以下操作可通过 Deno.ops 访问:

  • op_preview_entries

完整示例代码

下面是一个更完整的示例,展示如何在 Rust 项目中使用 deno_console 进行日志输出和调试:

use deno_core::{RuntimeOptions, JsRuntime};
use deno_console::deno_console;

fn main() {
    // 初始化运行时选项
    let mut options = RuntimeOptions::default();
    
    // 添加 deno_console 扩展
    options.extensions.push(deno_console::init());
    
    // 创建 JavaScript 运行时
    let mut runtime = JsRuntime::new(options);
    
    // 准备 JavaScript 代码
    let js_code = r#"
        // 测试各种日志级别
        console.debug("Debug message");
        console.log("Informational message");
        console.info("Info message");
        console.warn("Warning message");
        console.error("Error message");
        
        // 测试对象输出
        const obj = { name: "Deno", version: "1.0" };
        console.log("Object output:", obj);
        
        // 测试计时功能
        console.time("test-timer");
        for (let i = 0; i < 1000000; i++) {}
        console.timeEnd("test-timer");
        
        // 测试断言
        console.assert(1 === 1, "1 should equal 1");
        console.assert(1 === 2, "1 should not equal 2");
    "#;
    
    // 执行 JavaScript 代码
    if let Err(e) = runtime.execute_script("demo.js", js_code) {
        eprintln!("执行脚本出错: {}", e);
    }
}

安装

在你的项目目录中运行以下 Cargo 命令:

cargo add deno_console

或者在 Cargo.toml 中添加以下行:

deno_console = "0.213.0"

许可证

此 crate 使用 MIT 许可证。


1 回复

Rust Deno运行时控制台插件deno_console的使用指南

deno_console是一个为Deno运行时设计的Rust插件,它提供了高效的日志输出和调试功能,特别适合需要高性能日志记录和调试的Deno应用场景。

主要特性

  • 高性能的日志输出机制
  • 支持多级日志(debug, info, warn, error等)
  • 自定义日志格式
  • 线程安全的日志记录
  • 与Deno运行时无缝集成

安装方法

首先确保你已经安装了Deno(1.10或更高版本),然后在你的项目中导入deno_console:

import { Console } from "https://deno.land/x/deno_console/mod.ts";

基本使用示例

import { Console } from "https://deno.land/x/deno_console/mod.ts";

// 创建控制台实例
const console = new Console();

// 基本日志输出
console.log("This is a log message");
console.info("This is an info message");
console.warn("This is a warning");
console.error("This is an error");

// 带标签的日志
console.log("SYSTEM", "System initialized");
console.error("AUTH", "Authentication failed");

高级功能

1. 自定义日志级别

const console = new Console({
  level: "debug" // 设置日志级别为debug,会输出所有级别的日志
});

console.debug("Debug message"); // 只有在level设置为debug时才会显示

2. 自定义日志格式

const console = new Console({
  format: "[{level}] {time} - {message}"
});

console.log("Formatted message");
// 输出示例: [LOG] 2023-05-20T14:30:00.000Z - Formatted message

3. 性能计时

console.time("data-processing");
// 执行一些操作...
await someAsyncOperation();
console.timeEnd("data-processing"); // 输出操作耗时

4. 分组日志

console.group("User Operations");
console.log("Creating user");
console.log("Setting permissions");
console.groupEnd();

5. 断言

const value = 42;
console.assert(value === 42, "Value should be 42"); // 不会输出
console.assert(value === 43, "Value should be 43"); // 会输出错误

Rust端集成

如果你需要在Rust中直接使用deno_console,可以这样集成:

use deno_console::Console;

fn main() {
    let console = Console::new();
    console.log("Hello from Rust!");
    console.error("This is an error from Rust");
}

完整示例Demo

下面是一个完整的Deno TypeScript示例,展示了deno_console的主要功能:

import { Console } from "https://deno.land/x/deno_console/mod.ts";

// 创建带自定义配置的控制台实例
const console = new Console({
  level: "debug",  // 启用所有日志级别
  format: "[{level}] {time} - {message}"  // 自定义日志格式
});

// 基本日志输出
console.log("应用程序启动");
console.info("系统初始化完成");
console.warn("磁盘空间不足警告");
console.error("数据库连接失败");

// 带标签的日志
console.log("NETWORK", "服务器监听端口8080");
console.error("DB", "连接超时");

// 调试日志(只在debug级别显示)
console.debug("调试信息:变量值 = 42");

// 性能计时
console.time("data-process");
// 模拟数据处理
await new Promise(resolve => setTimeout(resolve, 500));
console.timeEnd("data-process");  // 输出: data-process: 500ms

// 分组日志
console.group("用户注册流程");
console.log("验证用户输入");
console.log("创建用户记录");
console.log("发送欢迎邮件");
console.groupEnd();

// 断言
const userId = 1001;
console.assert(userId > 0, "用户ID应为正数");  // 不会输出
console.assert(userId === 0, "用户ID不应为0");  // 会输出错误

性能优化建议

  1. 在生产环境中,将日志级别设置为warnerror以减少不必要的日志输出
  2. 对于高频日志,考虑使用console.debug并在生产环境中禁用debug级别
  3. 使用console.timeconsole.timeEnd来识别性能瓶颈

注意事项

  • deno_console是线程安全的,可以在多线程环境中使用
  • 在Deno Deploy等无服务器环境中使用时,注意日志输出可能会被限制
  • 对于非常高频的日志场景,建议进行采样或聚合后再输出

通过deno_console,开发者可以获得比原生console更强大、更灵活的日志记录能力,同时保持高性能特性。

回到顶部