# @abtnode/file-stream-rotator 中文文档

规范地址：https://npmcn.com/package/%40abtnode/file-stream-rotator/

版本：0\.6\.3
npm 元数据更新时间：2024-06-28T21:28:56.054Z
中文译文更新时间：2026-11-06T22:02:59.351Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40abtnode/file-stream-rotator
原文对照：https://npmcn.com/package/%40abtnode/file-stream-rotator/?lang=original
项目主页：https://github.com/rogerc/file-stream-rotator#readme
源码仓库：https://github.com/rogerc/file-stream-rotator

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

- 包体积（解压后）：53 kB，12 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：1 个
- 首次发布：2024-06-18T08:05:58.457Z
- 最新版本发布：2024-06-28T21:28:55.879Z
- 近 30 天下载量：2287（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 0 个）

## 中文简介

对日志文件有用的自动流旋转

## 安装

```sh
npm install @abtnode/file-stream-rotator
```

也可以使用：`pnpm add @abtnode/file-stream-rotator`、`yarn add @abtnode/file-stream-rotator`、`bun add @abtnode/file-stream-rotator`

## README

# 文件流旋转器

节点JS 文件流旋转器

## 目的

提供Express/Connect日志或其他任何需要按日期旋转的定期写入文件的自动旋转,大小限制或组合,并按计数或过期日删除旧日志文件.

## 安装

```
npm install file-stream-rotator
```

## 选项

-   _文件名_: 文件名,包括流所用的完整路径
-   _频率_:如何频繁地旋转. 选项是“ 每日”、“ 客户” 和“ 测试 ” 。 "测试"每分钟旋转一次. 如果将频率设置为以上无一,则文件名的末尾会添加一个YYYYMMDD字符串.
-   _动词_: 如果设置了, 它会在旋转文件和日志文件名称时登录到 STDOUT 。 默认是TRUE.
-   _日期( f)_: momentjs.com/docs/#/Displaying/format/。 (中文(简体) ). 该结果用于替换 文件名中的“%Date%”占位符. 如果使用"Custom"频率,则用于在字符串表示变化时触发文件旋转.
-   _大小_: 文件的最大大小, 之后会旋转 。 它可以与频率或日期格式相结合. 大小单位为"k","m"和"g". 单位需要直接跟随数字,如1g,100m,20k.
-   _最大值( l)_ 要保存的最大日志数 。 如果不设定, 它不会删除过去的日志 。 它使用自己的日志审计文件 以 json 格式跟踪日志文件。 它不会删除任何没有包含在其中的文件. 它可以是多个文件或天数. 如果使用天数,则添加"d"作为后缀.
-   _审计文件_ 存储日志审计文件的位置 。 如果没有设定,则会被存储在应用程序的根.
-   _结束流( s)_ 结束流( 真) 而不是毁灭( 默认: 假) 。 如果在写入时将值设定为真 如果程序终止或日志旋转,待冲走的数据可能会丢失.
-   _文件选项_ 一个物体传到溪上。 这可用于指定旗帜,编码和模式. 见 [https://nodejs.org/api/fs.html#fs fs createwritestream path options 互联网档案馆的存檔,存档日期2013-12-22](https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options)默认 `{ flags: 'a' }`。 。 。 .
-   _关卡_ 在文件名中使用 UTC 时间 。 默认为“ FALSE ”
-   _扩展_ 文件扩展名将附加在文件名上 。 在使用大小限制作为旋转时有用 满足所需大小时, 在文件名末尾添加一个数 (1, 2, 3, 4,...) .
-   _监视( l)_ 注意当前文件被写入,并在意外删除时重新创建. 默认为“ FALSE ”
-   _创建符号链接( s)_ 创建当前活动日志文件的可尾链接 。 默认为“ FALSE ”
-   _符号链接 名称_ 创建符号链接时使用的名称 。 默认为“ 当前.log ”
-   _审计 hash 类型_ 使用指定的散列算法进行审计 。 默认为“ md5 ” 。 使用"sha256"进行FIPS合规.

## 示例使用

```javascript
    // Default date added at the end of the file
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"daily", verbose: false});
 
    // Default date added using file pattern
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test-%DATE%.log", frequency:"daily", verbose: false});
 
    // Custom date added using file pattern using moment.js formats
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test-%DATE%.log", frequency:"daily", verbose: false, date_format: "YYYY-MM-DD"});
 
    // Rotate when the date format as calculated by momentjs is different (e.g monthly)
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test-%DATE%.log", frequency:"custom", verbose: false, date_format: "YYYY-MM"});
 
    // Rotate when the date format as calculated by momentjs is different (e.g weekly)
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test-%DATE%.log", frequency:"custom", verbose: false, date_format: "YYYY-ww"});
 
    // Rotate when the date format as calculated by momentjs is different (e.g AM/PM)
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test-%DATE%.log", frequency:"custom", verbose: false, date_format: "YYYY-MM-DD-A"});
 
    // Rotate on given minutes using the 'm' option i.e. 5m or 30m
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"5m", verbose: false});
     
    // Rotate on the hour or any specified number of hours
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"1h", verbose: false});

    // Rotate on the hour or any specified number of hours and keep 10 files
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"1h", verbose: false, max_logs: 10});

    // Rotate on the hour or any specified number of hours and keep 10 days
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"1h", verbose: false, max_logs: "10d"});

    // Rotate on the hour or any specified number of hours and keep 10 days and store the audit file in /tmp/log-audit.json
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/test.log", frequency:"1h", verbose: false, max_logs: "10d", audit_file: "/tmp/log-audit.json"});

    // Rotate by file size only without date included in the name. Iteration will be added at the end.
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/logfile", size:"50k", max_logs: "5", audit_file:"/tmp/logaudit.json"});

    // Rotate by file size only without date included in the name. Rotation added before the extension.
    var rotatingLogStream = require('file-stream-rotator').getStream({filename:"/tmp/logfile", size:"50k", max_logs: "5", audit_file:"/tmp/logaudit.json". extension: ".log"});


    //.....    
    
    // Use new stream in express
    app.use(express.logger({stream: rotatingLogStream, format: "default"}));
    
    //.....

```

你可以听从 _打开_, (中文(简体) ), _关闭_, (中文(简体) ), _错误_ 财务报告和审定财务报表 _结束_ 由开源流生成的事件。 您也可以收听自定义事件 :

-   _旋转_: 这将传递两个参数到回调: (_旧文件名_, (中文(简体) ), _新文件名称_(中文(简体) )
-   _新设_: 这将传递一个参数到回调 : _新文件名称_
-   _日志已删除_: 这将传递一个参数到召回: {_日期_: unix timestamp, (英语), _名称_: 文件名 已删除, _散列轴_: log file unique 识别符}

您还可以通过使用"k","m"和"g"来添加大小选项来限制每个文件的大小,以千字节,兆字节或千兆字节来指定文件的大小. 当它根据大小旋转一个文件时,它会给结尾增加一个数字,并在文件在给定期间每次旋转时递增它,如下所示.

```
  3078  7 Mar 13:09:58 2017 testlog-2017-03-07.13.09.log.20
  2052  7 Mar 13:10:00 2017 testlog-2017-03-07.13.09.log.21
  3078  7 Mar 13:10:05 2017 testlog-2017-03-07.13.10.log.1
  3078  7 Mar 13:10:08 2017 testlog-2017-03-07.13.10.log.2
  3078  7 Mar 13:10:11 2017 testlog-2017-03-07.13.10.log.3
  3078  7 Mar 13:10:14 2017 testlog-2017-03-07.13.10.log.4
```

下面的例子将每天旋转文件,但每个文件将限于5MB.

```javascript
    // Rotate every day or every 5 megabytes, whatever comes first.
    var rotatingLogStream = require('file-stream-rotator').getStream(
        {
            filename:"/tmp/test-%DATE%.log", 
            frequency:"custom", 
            verbose: false, 
            date_format: "YYYY-MM-DD",
            size: "5M" // its letter denominating the size is case insensitive
        }
    );
    rotatingLogStream.on('rotate',function(oldFile,newFile){
        // do something with old file like compression or delete older than X days.
    })
```

## 国家预防机制维护者

此库的 npm 模块将由以下维护:

-   [罗杰 C](http://github.com/rogerc)

## 贡献者

感谢下面的撰稿人提高公关和所有其他提出问题的人提高该单元的素质.

-   [马特·伯瑟](https://github.com/mattberther)
-   [昵称bug](https://github.com/nickbug)
-   [安德烈·法扎特](https://github.com/andrefarzat)
-   [Thibault.P (英语)](https://github.com/DrPlop)

## 许可证

档案流程旋转器根据麻省理工学院许可证获得许可.

## 常见问题

### @abtnode/file-stream-rotator 是什么？

对日志文件有用的自动流旋转

### 如何安装 @abtnode/file-stream-rotator？

在项目目录运行 npm install @abtnode/file-stream-rotator，或使用 pnpm add / yarn add / bun add。

### @abtnode/file-stream-rotator 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/abtnode\_\_file-stream-rotator 是否存在。

### @abtnode/file-stream-rotator 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @abtnode/file-stream-rotator 可以商用吗？

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

### @abtnode/file-stream-rotator 的下载量有多少？

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

### @abtnode/file-stream-rotator 还在维护吗？

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

