# @denodnt/logger 中文文档

规范地址：https://npmcn.com/package/%40denodnt/logger/

版本：1\.1\.6
npm 元数据更新时间：2024-05-17T13:46:19.629Z
中文译文更新时间：2026-11-11T22:45:50.694Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40denodnt/logger
原文对照：https://npmcn.com/package/%40denodnt/logger/?lang=original
项目主页：https://github.com/deno-library/logger
源码仓库：https://github.com/deno-library/logger

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：213 kB，169 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2023-05-18T06:16:57.310Z
- 最新版本发布：2024-05-17T13:46:19.424Z
- 近 30 天下载量：5628（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

可用于Deno和国家预防机制的 deno logger

## 安装

```sh
npm install @denodnt/logger
```

也可以使用：`pnpm add @denodnt/logger`、`yarn add @denodnt/logger`、`bun add @denodnt/logger`

## README

# 调试器

[![NPM Version](https://img.shields.io/npm/v/@denodnt/logger.svg?style=flat)](https://www.npmjs.org/package/@denodnt/logger) [![JSR Version](https://jsr.io/badges/@deno-lib/logger)](https://jsr.io/@deno-lib/logger)

Deno / 节点JS 彩色日志

对于德诺语的使用,是指 [deno- logger 医生](https://deno.land/x/logger)

## 用途

### 控制台记录器

```js
import Logger from "@denodnt/logger";

const logger = new Logger();

logger.info("i am from consoleLogger", { name: "zfx" });
logger.warn("i am from consoleLogger", 1, "any");
logger.error("i am from consoleLogger", new Error("test"));
```

### 文件与控制台日志

```js
import Logger from "@denodnt/logger";

const logger = new Logger();

// console only
logger.info("i am from consoleLogger", { name: "zfx" });
logger.warn("i am from consoleLogger", 1, "any");
logger.error("i am from consoleLogger", new Error("test"));

await logger.initFileLogger("../log");

// file and console
logger.info("i am from fileLogger", { name: "zfx" });
logger.warn("i am from fileLogger", 1, "any");
logger.error("i am from fileLogger", new Error("test"));
```

### 仅文件日志

```js
import Logger from "@denodnt/logger";

const logger = new Logger();
await logger.initFileLogger("../log");
logger.disableConsole();

// file only
logger.info(["i am from fileLogger", 1], { name: "zfx" });
```

### 文件日志选项参数

接口

```ts
interface fileLoggerOptions {
  rotate?: boolean; // cut by day
  maxBytes?: number;
  // Only available if maxBytes is provided, Otherwise you will get an error
  maxBackupCount?: number;
}
```

实例

```js
import Logger from "@denodnt/logger";
const logger = new Logger();

// cut by day
// filename is [date]_[type].log
// example 2020-05-25_warn.log, 2020-05-25_info.log, 2020-05-25_error.log
await logger.initFileLogger("../log", {
  rotate: true,
});

// maxBytes
// filename is [type].log.[timestamp]
// example: info.log.1590374415956
await logger.initFileLogger("../log", {
  maxBytes: 10 * 1024,
});

// rotate and maxBytes
// filename is [date]_[type].log.[timestamp]
// example: 2020-05-25_info.log.1590374415956
await logger.initFileLogger("../log", {
  rotate: true,
  maxBytes: 10 * 1024,
});

// maxBytes and maxBackupCount
// filename is [type].log.[n]
// example info.log.1, info.log.2 ...
// when reach maxBackupCount, the [type].log.[maxBackupCount-1] will be overwrite
//  detail:
// `maxBytes` specifies the maximum size
// in bytes that the log file can grow to before rolling over to a new one. If the
// size of the new log message plus the current log file size exceeds `maxBytes`
// then a roll over is triggered. When a roll over occurs, before the log message
// is written, the log file is renamed and appended with `.1`. If a `.1` version
// already existed, it would have been renamed `.2` first and so on. The maximum
// number of log files to keep is specified by `maxBackupCount`. After the renames
// are complete the log message is written to the original, now blank, file.
//
// Example: Given `log.txt`, `log.txt.1`, `log.txt.2` and `log.txt.3`, a
// `maxBackupCount` of 3 and a new log message which would cause `log.txt` to
// exceed `maxBytes`, then `log.txt.2` would be renamed to `log.txt.3` (thereby
// discarding the original contents of `log.txt.3` since 3 is the maximum number of
// backups to keep), `log.txt.1` would be renamed to `log.txt.2`, `log.txt` would
// be renamed to `log.txt.1` and finally `log.txt` would be created from scratch
// where the new log message would be written.
await logger.initFileLogger("../log", {
  maxBytes: 10 * 1024,
  maxBackupCount: 10,
});

// rotate and maxBytes and maxBackupCount
// filename is [date]_[type].log.[n]
// example 2020-05-25_info.log.1, 2020-05-25_info.log.2
// when reach maxBackupCount, the [type].log.[maxBackupCount-1] will be overwrite
await logger.initFileLogger("../log", {
  rotate: true,
  maxBytes: 10 * 1024,
  maxBackupCount: 10,
});

// rotate and maxBackupCount
// maxBackupCount will be ignored
await logger.initFileLogger("../log", {
  rotate: true,
  maxBackupCount: 10,
});
```

以下条件将丢出一个错误

```ts
// maxBackupCount
// get error => maxBackupCount must work with maxBytes
await logger.initFileLogger("../log", {
  maxBackupCount: 10,
});
// rotate and maxBackupCount
// get error => maxBackupCount must work with maxBytes
await logger.initFileLogger("../log", {
  rotate: true,
  maxBackupCount: 10,
});
```

## 禁用控制台并启用控制台

```js
import Logger from "@denodnt/logger";

const logger = new Logger();

// console
logger.info("console enabled, you can see me");
logger.disableConsole();
// no message is logged
logger.info("console disabled");
logger.enableConsole();
// console
logger.info("console enabled, you can see me");
```

## 禁用文件并启用文件

```js
import Logger from "@denodnt/logger";

const logger = new Logger();
await logger.initFileLogger("../log");

logger.disableFile();
// not log to file
logger.info("file disbaled");
logger.enableFile();
// log to file
logger.info("file enabled, you can see me");
```

## 禁用和启用

-   禁用写入文件和终端, 不要管它是否是当前 写入文件或终端,但希望恢复当前配置 待会
-   启用恢复先前的日志配置:文件、终端或两者兼有

示例:

1.  文件盗取者 禁用文件盗取者
2.  控制台Logger 禁用 QQ 启用 QQ 控制台Logger
3.  文件

```js
import Logger from "@denodnt/logger";

const logger = new Logger();
await logger.initFileLogger("../log");

logger.disable();
logger.enable();
```

## 测试

```bash
deno test --allow-read --allow-write
```

## 双层/ 三层集成

双层工程是一般的 npm 项目,可以导入为普通JS 模块或作为无害环境管理模块; 所以如果一个工程也可以作为德诺模块导入, 是个三重锁.

要将您的 Deno 项目转换为双层 npm 项目, 您应该使用 [值/值](https://deno.land/x/dnt),然后创建 `_build_npm.ts` 或者说 `scripts/build_npm.ts` 看起来像:

```ts
import { build, emptyDir } from "@deno/dnt";

// grap the next version number as you want
const version: Deno.args[0];
await emptyDir("./npm");
await build({
  entryPoints: ["./mod.ts"],
  outDir: "./npm",
  shims: {
    deno: true,
  },
  compilerOptions: {
    lib: ["dom", "esnext"],
  },
  package: {
    name: "pkg-name",
    version: version,
    // ... package stuff
  },
  // map your favorite deno logger to its npm port.
  mappings: {
    "@denodnt/logger": {
      name: "@denodnt/logger",
      version: "1.1.6",
      peerDependency: false,
    },
  },
});
```

## 截图

控制台  
![consoleLogger](https://github.com/deno-library/logger/blob/master/screenshots/consoleLogger.png)

文件缓存  
![fileLogger](https://github.com/deno-library/logger/blob/master/screenshots/fileLogger.png)

日切日志  
![CutByDay](https://github.com/deno-library/logger/blob/master/screenshots/fileLogger.rotate.png)

更多截图 `screenshots` 文件夹.

## 锁定接口

```ts
interface fileLoggerOptions {
  rotate?: boolean;  // cut by day
  maxBytes?: number, // the maximum size in bytes that the log file can grow to before rolling over to a new one
  maxBackupCount?: number // maxBackupCount must work with maxBytes
}

interface LoggerInerface {
  constructor()

  info(...args: unknown[]): void
  warn(...args: unknown[]): void
  error(...args: unknown[]): void

  async initFileLogger(dir: string, options: fileLoggerOptions = {}): Promise<void>

  disableConsole(): void
  enableConsole(): void

  disableFile(): void;
  enableFile(): void;

  disable(): void;
  enable(): void;
}
```

## 常见问题

### @denodnt/logger 是什么？

可用于Deno和国家预防机制的 deno logger

### 如何安装 @denodnt/logger？

在项目目录运行 npm install @denodnt/logger，或使用 pnpm add / yarn add / bun add。

### @denodnt/logger 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @denodnt/logger 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @denodnt/logger 可以商用吗？

@denodnt/logger 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @denodnt/logger 的下载量有多少？

根据 npm 官方下载统计，@denodnt/logger 在 2026/10/12 – 2026/11/10 这 30 天内被下载 5,628 次，日均约 188 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @denodnt/logger 还在维护吗？

最新版本 1\.1\.6 发布于 2024/05/17（2 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/05/18。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

