@eggjs/logrotator 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/README.zh-CN.md +115 -0
- package/dist/commonjs/agent.d.ts +2 -0
- package/dist/commonjs/agent.js +5 -0
- package/dist/commonjs/app/extend/agent.d.ts +5 -0
- package/dist/commonjs/app/extend/agent.js +8 -0
- package/dist/commonjs/app/extend/application.d.ts +5 -0
- package/dist/commonjs/app/extend/application.js +7 -0
- package/dist/commonjs/app/schedule/clean_log.d.ts +9 -0
- package/dist/commonjs/app/schedule/clean_log.js +74 -0
- package/dist/commonjs/app/schedule/rotate_by_file.d.ts +10 -0
- package/dist/commonjs/app/schedule/rotate_by_file.js +17 -0
- package/dist/commonjs/app/schedule/rotate_by_hour.d.ts +10 -0
- package/dist/commonjs/app/schedule/rotate_by_hour.js +17 -0
- package/dist/commonjs/app/schedule/rotate_by_size.d.ts +10 -0
- package/dist/commonjs/app/schedule/rotate_by_size.js +17 -0
- package/dist/commonjs/app.d.ts +2 -0
- package/dist/commonjs/app.js +5 -0
- package/dist/commonjs/boot.d.ts +6 -0
- package/dist/commonjs/boot.js +18 -0
- package/dist/commonjs/config/config.default.d.ts +64 -0
- package/dist/commonjs/config/config.default.js +16 -0
- package/dist/commonjs/index.d.ts +2 -0
- package/dist/commonjs/index.js +19 -0
- package/dist/commonjs/lib/day_rotator.d.ts +8 -0
- package/dist/commonjs/lib/day_rotator.js +89 -0
- package/dist/commonjs/lib/hour_rotator.d.ts +6 -0
- package/dist/commonjs/lib/hour_rotator.js +46 -0
- package/dist/commonjs/lib/rotator.d.ts +16 -0
- package/dist/commonjs/lib/rotator.js +78 -0
- package/dist/commonjs/lib/size_rotator.d.ts +5 -0
- package/dist/commonjs/lib/size_rotator.js +73 -0
- package/dist/commonjs/lib/utils.d.ts +11 -0
- package/dist/commonjs/lib/utils.js +24 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/types.d.ts +11 -0
- package/dist/commonjs/types.js +3 -0
- package/dist/esm/agent.d.ts +2 -0
- package/dist/esm/agent.js +3 -0
- package/dist/esm/app/extend/agent.d.ts +5 -0
- package/dist/esm/app/extend/agent.js +6 -0
- package/dist/esm/app/extend/application.d.ts +5 -0
- package/dist/esm/app/extend/application.js +5 -0
- package/dist/esm/app/schedule/clean_log.d.ts +9 -0
- package/dist/esm/app/schedule/clean_log.js +69 -0
- package/dist/esm/app/schedule/rotate_by_file.d.ts +10 -0
- package/dist/esm/app/schedule/rotate_by_file.js +15 -0
- package/dist/esm/app/schedule/rotate_by_hour.d.ts +10 -0
- package/dist/esm/app/schedule/rotate_by_hour.js +15 -0
- package/dist/esm/app/schedule/rotate_by_size.d.ts +10 -0
- package/dist/esm/app/schedule/rotate_by_size.js +15 -0
- package/dist/esm/app.d.ts +2 -0
- package/dist/esm/app.js +3 -0
- package/dist/esm/boot.d.ts +6 -0
- package/dist/esm/boot.js +14 -0
- package/dist/esm/config/config.default.d.ts +64 -0
- package/dist/esm/config/config.default.js +14 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/lib/day_rotator.d.ts +8 -0
- package/dist/esm/lib/day_rotator.js +82 -0
- package/dist/esm/lib/hour_rotator.d.ts +6 -0
- package/dist/esm/lib/hour_rotator.js +39 -0
- package/dist/esm/lib/rotator.d.ts +16 -0
- package/dist/esm/lib/rotator.js +71 -0
- package/dist/esm/lib/size_rotator.d.ts +5 -0
- package/dist/esm/lib/size_rotator.js +66 -0
- package/dist/esm/lib/utils.d.ts +11 -0
- package/dist/esm/lib/utils.js +21 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/types.d.ts +11 -0
- package/dist/esm/types.js +2 -0
- package/dist/package.json +4 -0
- package/package.json +101 -0
- package/src/agent.ts +3 -0
- package/src/app/extend/agent.ts +6 -0
- package/src/app/extend/application.ts +5 -0
- package/src/app/schedule/clean_log.ts +74 -0
- package/src/app/schedule/rotate_by_file.ts +18 -0
- package/src/app/schedule/rotate_by_hour.ts +19 -0
- package/src/app/schedule/rotate_by_size.ts +18 -0
- package/src/app.ts +3 -0
- package/src/boot.ts +13 -0
- package/src/config/config.default.ts +74 -0
- package/src/index.ts +3 -0
- package/src/lib/day_rotator.ts +91 -0
- package/src/lib/hour_rotator.ts +44 -0
- package/src/lib/rotator.ts +88 -0
- package/src/lib/size_rotator.ts +67 -0
- package/src/lib/utils.ts +26 -0
- package/src/types.ts +15 -0
- package/src/typings/index.d.ts +4 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016-present Alibaba Group Holding Limited and other contributors.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# @eggjs/logrotator
|
|
2
|
+
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[](https://github.com/eggjs/logrotator/actions/workflows/nodejs.yml)
|
|
5
|
+
[](https://codecov.io/gh/eggjs/logrotator)
|
|
6
|
+
[![npm download][download-image]][download-url]
|
|
7
|
+
[](https://nodejs.org/en/download/)
|
|
8
|
+
[](https://makeapullrequest.com)
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/logrotator.svg?style=flat-square
|
|
12
|
+
[npm-url]: https://npmjs.org/package/@eggjs/logrotator
|
|
13
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/logrotator.svg?style=flat-square
|
|
14
|
+
[download-url]: https://npmjs.org/package/@eggjs/logrotator
|
|
15
|
+
|
|
16
|
+
LogRotator for egg. Rotate all file of `app.loggers` by default
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm i @eggjs/logrotator
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
- `plugin.js`
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
exports.logrotator = {
|
|
30
|
+
enable: true,
|
|
31
|
+
package: '@eggjs/logrotator',
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `config.default.js`
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
// if any files need rotate by file size, config here
|
|
39
|
+
exports.logrotator = {
|
|
40
|
+
filesRotateByHour: [], // list of files that will be rotated by hour
|
|
41
|
+
hourDelimiter: '-', // rotate the file by hour use specified delimiter
|
|
42
|
+
filesRotateBySize: [], // list of files that will be rotated by size
|
|
43
|
+
maxFileSize: 50 * 1024 * 1024, // Max file size to judge if any file need rotate
|
|
44
|
+
maxFiles: 10, // pieces rotate by size
|
|
45
|
+
rotateDuration: 60000, // time interval to judge if any file need rotate
|
|
46
|
+
maxDays: 31, // keep max days log files, default is `31`. Set `0` to keep all logs
|
|
47
|
+
gzip:false, // use gzip compress logger on rotate file, default is `false`. Set `true` to enable
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Feature
|
|
52
|
+
|
|
53
|
+
By default, LogRotator will rotate all files of `app.loggers` at 00:00 everyday, the format is `.log.YYYY-MM-DD` (`egg-web.log.2016-09-30`).
|
|
54
|
+
|
|
55
|
+
### By Size
|
|
56
|
+
|
|
57
|
+
Rotate by size with config `filesRotateBySize`. when the file size is greater than `maxFileSize`, it will rename to `.log.1`.
|
|
58
|
+
|
|
59
|
+
If the file you renamed to is exists, it will increment by 1 (`.log.1` -> `.log.2`), until `maxFiles`. if it reaches the `maxFiles`, then overwrite `.log.${maxFiles}`.
|
|
60
|
+
|
|
61
|
+
Files in `filesRotateBySize` won't be rotated by day.
|
|
62
|
+
|
|
63
|
+
If `file` is relative path, then will normalize to `path.join(this.app.config.logger.dir, file)`.
|
|
64
|
+
|
|
65
|
+
### By Hour
|
|
66
|
+
|
|
67
|
+
Rotate by hour with config `filesRotateByHour`. rotate the file at 00 every hour, the format is `.log.YYYY-MM-DD-HH`.
|
|
68
|
+
|
|
69
|
+
Files in `filesRotateByHour` won't be rotated by day.
|
|
70
|
+
|
|
71
|
+
If `file` is relative path, then will normalize to `path.join(this.app.config.logger.dir, file)`.
|
|
72
|
+
|
|
73
|
+
## Customize
|
|
74
|
+
|
|
75
|
+
You can use `app.LogRotator` to customize.
|
|
76
|
+
|
|
77
|
+
```js
|
|
78
|
+
// app/schedule/custom.js
|
|
79
|
+
module.exports = app => {
|
|
80
|
+
const rotator = getRotator(app);
|
|
81
|
+
return {
|
|
82
|
+
// https://github.com/eggjs/egg-schedule
|
|
83
|
+
schedule: {
|
|
84
|
+
type: 'worker', // only one worker run this task
|
|
85
|
+
cron: '10 * * * *', // custom cron, or use interval
|
|
86
|
+
},
|
|
87
|
+
async task() {
|
|
88
|
+
await rotator.rotate();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
function getRotator(app) {
|
|
94
|
+
class CustomRotator extends app.LogRotator {
|
|
95
|
+
// return map that contains a pair of srcPath and targetPath
|
|
96
|
+
// LogRotator will rename ksrcPath to targetPath
|
|
97
|
+
async getRotateFiles() {
|
|
98
|
+
const files = new Map();
|
|
99
|
+
const srcPath = '/home/admin/foo.log';
|
|
100
|
+
const targetPath = '/home/admin/foo.log.2016.09.30';
|
|
101
|
+
files.set(srcPath, { srcPath, targetPath });
|
|
102
|
+
return files;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return new CustomRotator({ app });
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Define a method called `getRotateFiles`, return a map contains a pair of srcPath and targetPath.
|
|
110
|
+
|
|
111
|
+
## Questions & Suggestions
|
|
112
|
+
|
|
113
|
+
Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
[MIT](LICENSE)
|
|
118
|
+
|
|
119
|
+
## Contributors
|
|
120
|
+
|
|
121
|
+
[](https://github.com/eggjs/logrotator/graphs/contributors)
|
|
122
|
+
|
|
123
|
+
Made with [contributors-img](https://contrib.rocks).
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# @eggjs/logrotator
|
|
2
|
+
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[](https://github.com/eggjs/logrotator/actions/workflows/nodejs.yml)
|
|
5
|
+
[](https://codecov.io/gh/eggjs/logrotator)
|
|
6
|
+
[![npm download][download-image]][download-url]
|
|
7
|
+
[](https://nodejs.org/en/download/)
|
|
8
|
+
[](https://makeapullrequest.com)
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/logrotator.svg?style=flat-square
|
|
12
|
+
[npm-url]: https://npmjs.org/package/@eggjs/logrotator
|
|
13
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/logrotator.svg?style=flat-square
|
|
14
|
+
[download-url]: https://npmjs.org/package/@eggjs/logrotator
|
|
15
|
+
|
|
16
|
+
egg 的日志切割插件,默认会按照时间切割所有的 app.loggers。
|
|
17
|
+
|
|
18
|
+
## 配置
|
|
19
|
+
|
|
20
|
+
- `plugin.js`
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
exports.logrotator = true;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- `config.default.js`
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
// 如果有需要按照文件大小切割的日志,在这里配置
|
|
30
|
+
exports.logrotator = {
|
|
31
|
+
filesRotateByHour: [], // 需要按小时切割的文件
|
|
32
|
+
hourDelimiter: '-', // 按照小时切割的文件, 小时部分的分隔符.
|
|
33
|
+
filesRotateBySize: [], // 需要按大小切割的文件,其他日志文件仍按照通常方式切割
|
|
34
|
+
maxFileSize: 50 * 1024 * 1024, // 最大文件大小,默认为50m
|
|
35
|
+
maxFiles: 10, // 按大小切割时,文件最大切割的份数
|
|
36
|
+
rotateDuration: 60000, // 按大小切割时,文件扫描的间隔时间
|
|
37
|
+
maxDays: 31, // 日志保留最久天数
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 功能说明
|
|
42
|
+
|
|
43
|
+
logrotator 默认在每日0点按照时间切割,会将 app.loggers 下所有的 logger 都进行切割,格式为 `.log.YYYY-MM-DD`,如 `egg-web.log.2016-09-30`。
|
|
44
|
+
|
|
45
|
+
### 按大小切割
|
|
46
|
+
|
|
47
|
+
可以配置 `filesRotateBySize` 文件列表按大小切割,当文件大于 `maxFileSize` 时进行切割,格式为 `.log.1`。
|
|
48
|
+
|
|
49
|
+
当已有切割文件时会将原文件自增 1,如 `.log.1` -> `.log.2`。当切割分数大于 `maxFiles` 时会覆盖最后一份。
|
|
50
|
+
|
|
51
|
+
配置了这个功能的文件不会再按默认切割。
|
|
52
|
+
|
|
53
|
+
如配置为相对路径,则默认会转换为 `path.join(this.app.config.logger.dir, file)`。
|
|
54
|
+
|
|
55
|
+
### 按小时切割
|
|
56
|
+
|
|
57
|
+
可以配置 `filesRotateBySize` 文件列表按小时切割,每小时0分开始切割,格式为 `.log.YYYY-MM-DD-HH`。
|
|
58
|
+
|
|
59
|
+
配置了这个功能的文件不会再按默认切割。
|
|
60
|
+
|
|
61
|
+
如配置为相对路径,则默认会转换为 `path.join(this.app.config.logger.dir, file)`。
|
|
62
|
+
|
|
63
|
+
## 自定义
|
|
64
|
+
|
|
65
|
+
你可以使用 `app.LogRotator` 来自定义切割。
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
// app/schedule/custom.js
|
|
69
|
+
module.exports = app => {
|
|
70
|
+
const rotator = getRotator(app);
|
|
71
|
+
return {
|
|
72
|
+
// https://github.com/eggjs/egg-schedule
|
|
73
|
+
schedule: {
|
|
74
|
+
type: 'worker', // only one worker run this task
|
|
75
|
+
cron: '10 * * * *', // custom cron, or use interval
|
|
76
|
+
},
|
|
77
|
+
* task() {
|
|
78
|
+
yield rotator.rotate();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
function getRotator(app) {
|
|
84
|
+
class CustomRotator extends app.LogRotator {
|
|
85
|
+
// return map that contains a pair of srcPath and targetPath
|
|
86
|
+
// LogRotator will rename srcPath to targetPath
|
|
87
|
+
// 返回一个 map,其中包含 srcPath 和 targetPath,
|
|
88
|
+
// LogRotator 会将 srcPath 重命名成 targetPath
|
|
89
|
+
* getRotateFiles() {
|
|
90
|
+
const files = new Map();
|
|
91
|
+
const srcPath = '/home/admin/foo.log';
|
|
92
|
+
const targetPath = '/home/admin/foo.log.2016.09.30';
|
|
93
|
+
files.set(srcPath, { srcPath, targetPath });
|
|
94
|
+
return files;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return new CustomRotator({ app });
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
你只需要定义一个 getRotateFiles 方法,指定重命名的 map。
|
|
102
|
+
|
|
103
|
+
## Questions & Suggestions
|
|
104
|
+
|
|
105
|
+
Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
|
|
109
|
+
[MIT](LICENSE)
|
|
110
|
+
|
|
111
|
+
## Contributors
|
|
112
|
+
|
|
113
|
+
[](https://github.com/eggjs/logrotator/graphs/contributors)
|
|
114
|
+
|
|
115
|
+
Made with [contributors-img](https://contrib.rocks).
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const boot_js_1 = require("./boot.js");
|
|
4
|
+
exports.default = boot_js_1.Boot;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBaUM7QUFFakMsa0JBQWUsY0FBSSxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rotator_js_1 = require("../../lib/rotator.js");
|
|
4
|
+
// egg-schedule will load both at app and agent, so we should mount it for compatible
|
|
5
|
+
exports.default = {
|
|
6
|
+
LogRotator: rotator_js_1.LogRotator,
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFrRDtBQUVsRCxxRkFBcUY7QUFDckYsa0JBQWU7SUFDYixVQUFVLEVBQVYsdUJBQVU7Q0FDWCxDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rotator_js_1 = require("../../lib/rotator.js");
|
|
4
|
+
exports.default = {
|
|
5
|
+
LogRotator: rotator_js_1.LogRotator,
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFrRDtBQUVsRCxrQkFBZTtJQUNiLFVBQVUsRUFBVix1QkFBVTtDQUNYLENBQUMifQ==
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const utility_1 = require("utility");
|
|
9
|
+
const moment_1 = __importDefault(require("moment"));
|
|
10
|
+
const utils_js_1 = require("../../lib/utils.js");
|
|
11
|
+
// clean all xxx.log.YYYY-MM-DD before expired date.
|
|
12
|
+
exports.default = (app) => ({
|
|
13
|
+
schedule: {
|
|
14
|
+
type: 'worker', // only one worker run this task
|
|
15
|
+
cron: '0 0 * * *', // run every day at 00:00
|
|
16
|
+
},
|
|
17
|
+
async task() {
|
|
18
|
+
const logger = app.coreLogger;
|
|
19
|
+
const logDirs = new Set();
|
|
20
|
+
const loggerFiles = (0, utils_js_1.walkLoggerFile)(app.loggers);
|
|
21
|
+
loggerFiles.forEach(file => {
|
|
22
|
+
const logDir = node_path_1.default.dirname(file);
|
|
23
|
+
logDirs.add(logDir);
|
|
24
|
+
});
|
|
25
|
+
const maxDays = app.config.logrotator.maxDays;
|
|
26
|
+
if (maxDays && maxDays > 0) {
|
|
27
|
+
try {
|
|
28
|
+
const tasks = Array.from(logDirs, logDir => removeExpiredLogFiles(logDir, maxDays, logger));
|
|
29
|
+
await Promise.all(tasks);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
logger.error(err);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
logger.info('[@eggjs/logrotator] clean all log before %s days', maxDays);
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
// remove expired log files: xxx.log.YYYY-MM-DD
|
|
39
|
+
async function removeExpiredLogFiles(logDir, maxDays, logger) {
|
|
40
|
+
// ignore not exists dir
|
|
41
|
+
const stat = await (0, utility_1.exists)(logDir);
|
|
42
|
+
if (!stat) {
|
|
43
|
+
logger.warn(`[@eggjs/logrotator] logDir ${logDir} not exists`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const files = await promises_1.default.readdir(logDir);
|
|
47
|
+
const expiredDate = (0, moment_1.default)().subtract(maxDays, 'days').startOf('date');
|
|
48
|
+
const names = files.filter(file => {
|
|
49
|
+
const name = node_path_1.default.extname(file).substring(1);
|
|
50
|
+
if (!/^\d{4}\-\d{2}\-\d{2}/.test(name)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const date = (0, moment_1.default)(name, 'YYYY-MM-DD').startOf('date');
|
|
54
|
+
if (!date.isValid()) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return date.isBefore(expiredDate);
|
|
58
|
+
});
|
|
59
|
+
if (names.length === 0) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
logger.info(`[@eggjs/logrotator] start remove ${logDir} files: ${names.join(', ')}`);
|
|
63
|
+
await Promise.all(names.map(async (name) => {
|
|
64
|
+
const logFile = node_path_1.default.join(logDir, name);
|
|
65
|
+
try {
|
|
66
|
+
await promises_1.default.unlink(logFile);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
err.message = `[@eggjs/logrotator] remove logFile ${logFile} error, ${err.message}`;
|
|
70
|
+
logger.error(err);
|
|
71
|
+
}
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW5fbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zY2hlZHVsZS9jbGVhbl9sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBNkI7QUFDN0IsZ0VBQWtDO0FBQ2xDLHFDQUFpQztBQUNqQyxvREFBNEI7QUFFNUIsaURBQW9EO0FBRXBELG9EQUFvRDtBQUNwRCxrQkFBZSxDQUFDLEdBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoQyxRQUFRLEVBQUU7UUFDUixJQUFJLEVBQUUsUUFBUSxFQUFFLGdDQUFnQztRQUNoRCxJQUFJLEVBQUUsV0FBVyxFQUFFLHlCQUF5QjtLQUM3QztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUEseUJBQWMsRUFBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLE1BQU0sR0FBRyxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQzlDLElBQUksT0FBTyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxD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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const day_rotator_js_1 = require("../../lib/day_rotator.js");
|
|
4
|
+
exports.default = (app) => {
|
|
5
|
+
const rotator = new day_rotator_js_1.DayRotator({ app });
|
|
6
|
+
return {
|
|
7
|
+
schedule: {
|
|
8
|
+
type: 'worker', // only one worker run this task
|
|
9
|
+
cron: '1 0 0 * * *', // run every day at 00:00
|
|
10
|
+
disable: app.config.logrotator.disableRotateByDay,
|
|
11
|
+
},
|
|
12
|
+
async task() {
|
|
13
|
+
await rotator.rotate();
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX2J5X2ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NjaGVkdWxlL3JvdGF0ZV9ieV9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsNkRBQXNEO0FBRXRELGtCQUFlLENBQUMsR0FBWSxFQUFFLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSwyQkFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV4QyxPQUFPO1FBQ0wsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQ0FBZ0M7WUFDaEQsSUFBSSxFQUFFLGFBQWEsRUFBRSx5QkFBeUI7WUFDOUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGtCQUFrQjtTQUNsRDtRQUVELEtBQUssQ0FBQyxJQUFJO1lBQ1IsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const hour_rotator_js_1 = require("../../lib/hour_rotator.js");
|
|
4
|
+
exports.default = (app) => {
|
|
5
|
+
const rotator = new hour_rotator_js_1.HourRotator({ app });
|
|
6
|
+
return {
|
|
7
|
+
schedule: {
|
|
8
|
+
type: 'worker', // only one worker run this task
|
|
9
|
+
cron: '1 * * * *', // run every hour at 01
|
|
10
|
+
disable: (app.config.logrotator.filesRotateByHour || []).length === 0,
|
|
11
|
+
},
|
|
12
|
+
async task() {
|
|
13
|
+
await rotator.rotate();
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX2J5X2hvdXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NjaGVkdWxlL3JvdGF0ZV9ieV9ob3VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsK0RBQXdEO0FBRXhELGtCQUFlLENBQUMsR0FBWSxFQUFFLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSw2QkFBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV6QyxPQUFPO1FBQ0wsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQ0FBZ0M7WUFDaEQsSUFBSSxFQUFFLFdBQVcsRUFBRSx1QkFBdUI7WUFDMUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7U0FDdEU7UUFFRCxLQUFLLENBQUMsSUFBSTtZQUNSLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLENBQUM7S0FFRixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const size_rotator_js_1 = require("../../lib/size_rotator.js");
|
|
4
|
+
exports.default = (app) => {
|
|
5
|
+
const rotator = new size_rotator_js_1.SizeRotator({ app });
|
|
6
|
+
return {
|
|
7
|
+
schedule: {
|
|
8
|
+
type: 'worker',
|
|
9
|
+
interval: app.config.logrotator.rotateDuration,
|
|
10
|
+
disable: (app.config.logrotator.filesRotateBySize || []).length === 0,
|
|
11
|
+
},
|
|
12
|
+
async task() {
|
|
13
|
+
await rotator.rotate();
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX2J5X3NpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NjaGVkdWxlL3JvdGF0ZV9ieV9zaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsK0RBQXdEO0FBRXhELGtCQUFlLENBQUMsR0FBWSxFQUFFLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSw2QkFBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV6QyxPQUFPO1FBQ0wsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztTQUN0RTtRQUVELEtBQUssQ0FBQyxJQUFJO1lBQ1IsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const boot_js_1 = require("./boot.js");
|
|
4
|
+
exports.default = boot_js_1.Boot;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUFpQztBQUVqQyxrQkFBZSxjQUFJLENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Boot = void 0;
|
|
4
|
+
class Boot {
|
|
5
|
+
app;
|
|
6
|
+
constructor(app) {
|
|
7
|
+
this.app = app;
|
|
8
|
+
}
|
|
9
|
+
async didLoad() {
|
|
10
|
+
// reload logger to new fd after rotating
|
|
11
|
+
this.app.messenger.on('log-reload', () => {
|
|
12
|
+
this.app.loggers.reload();
|
|
13
|
+
this.app.coreLogger.info('[@eggjs/logrotator] %s logger reload: got log-reload message', this.app.type);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Boot = Boot;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ib290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsSUFBSTtJQUNjO0lBQTdCLFlBQTZCLEdBQVk7UUFBWixRQUFHLEdBQUgsR0FBRyxDQUFTO0lBQUcsQ0FBQztJQUU3QyxLQUFLLENBQUMsT0FBTztRQUNYLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsOERBQThELEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELG9CQVVDIn0=
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* logrotator options
|
|
3
|
+
* @member Config#logrotator
|
|
4
|
+
*/
|
|
5
|
+
export interface LogrotatorConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Disable rotate by day
|
|
8
|
+
*
|
|
9
|
+
* Default: `false`
|
|
10
|
+
*/
|
|
11
|
+
disableRotateByDay: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* List of files that will be rotated by hour
|
|
14
|
+
*
|
|
15
|
+
* Default: `null`
|
|
16
|
+
*/
|
|
17
|
+
filesRotateByHour: string[] | null;
|
|
18
|
+
/**
|
|
19
|
+
* Hour delimiter
|
|
20
|
+
*
|
|
21
|
+
* Default: `-`
|
|
22
|
+
*/
|
|
23
|
+
hourDelimiter: string;
|
|
24
|
+
/**
|
|
25
|
+
* List of files that will be rotated by size
|
|
26
|
+
*
|
|
27
|
+
* Default: `null`
|
|
28
|
+
*/
|
|
29
|
+
filesRotateBySize: string[] | null;
|
|
30
|
+
/**
|
|
31
|
+
* Max file size to judge if any file need rotate
|
|
32
|
+
*
|
|
33
|
+
* Default: `50 * 1024 * 1024`
|
|
34
|
+
*/
|
|
35
|
+
maxFileSize: number;
|
|
36
|
+
/**
|
|
37
|
+
* Max files to keep
|
|
38
|
+
*
|
|
39
|
+
* Default: `10`
|
|
40
|
+
*/
|
|
41
|
+
maxFiles: number;
|
|
42
|
+
/**
|
|
43
|
+
* Time interval to judge if any file need rotate
|
|
44
|
+
*
|
|
45
|
+
* Default: `60000`
|
|
46
|
+
*/
|
|
47
|
+
rotateDuration: number;
|
|
48
|
+
/**
|
|
49
|
+
* Max days to keep log files, set `0` to keep all logs.
|
|
50
|
+
*
|
|
51
|
+
* Default: `31`
|
|
52
|
+
*/
|
|
53
|
+
maxDays: number;
|
|
54
|
+
/**
|
|
55
|
+
* Enable gzip compression for rotated files
|
|
56
|
+
*
|
|
57
|
+
* Default: `false`
|
|
58
|
+
*/
|
|
59
|
+
gzip: boolean;
|
|
60
|
+
}
|
|
61
|
+
declare const _default: {
|
|
62
|
+
logrotator: LogrotatorConfig;
|
|
63
|
+
};
|
|
64
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
logrotator: {
|
|
5
|
+
disableRotateByDay: false,
|
|
6
|
+
filesRotateByHour: null,
|
|
7
|
+
hourDelimiter: '-',
|
|
8
|
+
filesRotateBySize: null,
|
|
9
|
+
maxFileSize: 50 * 1024 * 1024,
|
|
10
|
+
maxFiles: 10,
|
|
11
|
+
rotateDuration: 60000,
|
|
12
|
+
maxDays: 31,
|
|
13
|
+
gzip: false,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkRBLGtCQUFlO0lBQ2IsVUFBVSxFQUFFO1FBQ1Ysa0JBQWtCLEVBQUUsS0FBSztRQUN6QixpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLGFBQWEsRUFBRSxHQUFHO1FBQ2xCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtRQUM3QixRQUFRLEVBQUUsRUFBRTtRQUNaLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsSUFBSSxFQUFFLEtBQUs7S0FDUTtDQUN0QixDQUFDIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
require("./types.js");
|
|
18
|
+
__exportStar(require("./lib/rotator.js"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNCQUFvQjtBQUVwQixtREFBaUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LogRotator, RotateFile, RotatorOptions } from './rotator.js';
|
|
2
|
+
export declare class DayRotator extends LogRotator {
|
|
3
|
+
private filesRotateBySize;
|
|
4
|
+
private filesRotateByHour;
|
|
5
|
+
constructor(options: RotatorOptions);
|
|
6
|
+
getRotateFiles(): Promise<Map<string, RotateFile>>;
|
|
7
|
+
_setFile(srcPath: string, files: Map<string, RotateFile>): void;
|
|
8
|
+
}
|