# egg-logrotator

> logrotator for egg

Latest version **3.2.0** (published 2024-09-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install egg-logrotator
pnpm add egg-logrotator
yarn add egg-logrotator
bun add egg-logrotator
```

## Health

**Score 30/100 (F)** — status: maintenance-mode.

Positive: no vulnerabilities; has provenance.

Warnings: low downloads; no types; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.2.0 |
| Published | 2024-09-28 |
| First published | 2016-08-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=8.0.0 |
| Dependencies | 2 |
| Unpacked size | 23.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 55 |
| Author | tianyi.jiangty |
| Maintainers | jtyjty99999, atian25, dead_horse, fengmk2, popomore, eggjs-admin |
| Keywords | egg, eggPlugin, egg-plugin, logger, logrotator |

## Links

- npm: https://www.npmjs.com/package/egg-logrotator
- Repository: https://github.com/eggjs/egg-logrotator
- Homepage: https://github.com/eggjs/egg-logrotator#readme
- Issues: https://github.com/eggjs/egg/issues
- npm.io page: https://npm.io/package/egg-logrotator

## Dependencies (2)

- [mz](https://npm.io/package/mz.md) ^2.7.0
- [moment](https://npm.io/package/moment.md) ^2.24.0

## Alternatives

- [cli-color](https://npm.io/package/cli-color.md) — 3.4M weekly downloads
- [log](https://npm.io/package/log.md) — 1.3M weekly downloads
- [logstash-client](https://npm.io/package/logstash-client.md) — 4.5K weekly downloads
- [@nocobase/plugin-logger](https://npm.io/package/@nocobase/plugin-logger.md) — 2.0K weekly downloads
- [child-process-debug](https://npm.io/package/child-process-debug.md) — 695 weekly downloads

## Recent versions

- 3.2.0 (latest) — 2024-09-28
- 2.3.3 (latest-2) — 2018-12-05
- 3.1.0 — 2019-04-25
- 3.0.7 — 2019-03-13
- 3.0.6 — 2019-03-06
- 3.0.5 — 2018-12-04
- 3.0.4 — 2018-10-23
- 2.3.2 — 2018-05-09
- 3.0.3 — 2018-03-29
- 3.0.2 — 2018-02-23
- 2.3.1 — 2017-12-11
- 3.0.1 — 2017-12-11
- 3.0.0 — 2017-11-10
- 2.3.0 — 2017-11-02
- 2.2.3 — 2017-06-04
- … 5 more at https://npm.io/package/egg-logrotator/versions

## README

# egg-logrotator

[![NPM version][npm-image]][npm-url]
[![CI](https://github.com/eggjs/egg-logrotator/actions/workflows/nodejs.yml/badge.svg)](https://github.com/eggjs/egg-logrotator/actions/workflows/nodejs.yml)
[![Test coverage](https://img.shields.io/codecov/c/github/eggjs/egg-logrotator.svg?style=flat-square)](https://codecov.io/gh/eggjs/egg-logrotator)
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/egg-logrotator.svg?style=flat-square
[npm-url]: https://npmjs.org/package/egg-logrotator
[download-image]: https://img.shields.io/npm/dm/egg-logrotator.svg?style=flat-square
[download-url]: https://npmjs.org/package/egg-logrotator

LogRotator for egg. Rotate all file of `app.loggers` by default

## Install

```bash
npm i egg-logrotator
```

## Usage

- `plugin.js`

```js
exports.logrotator = {
  enable: true,
  package: 'egg-logrotator',
};
```

- `config.default.js`

```js
// if any files need rotate by file size, config here
exports.logrotator = {
  filesRotateByHour: [],           // list of files that will be rotated by hour
  hourDelimiter: '-',              // rotate the file by hour use specified delimiter
  filesRotateBySize: [],           // list of files that will be rotated by size
  maxFileSize: 50 * 1024 * 1024,   // Max file size to judge if any file need rotate
  maxFiles: 10,                    // pieces rotate by size
  rotateDuration: 60000,           // time interval to judge if any file need rotate
  maxDays: 31,                     // keep max days log files, default is `31`. Set `0` to keep all logs
};
```

## Feature

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`).

### By Size

Rotate by size with config `filesRotateBySize`. when the file size is greater than `maxFileSize`, it will rename to `.log.1`.

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}`.

Files in `filesRotateBySize` won't be rotated by day.

If `file` is relative path, then will normalize to `path.join(this.app.config.logger.dir, file)`.

### By Hour

Rotate by hour with config `filesRotateByHour`. rotate the file at 00 every hour, the format is `.log.YYYY-MM-DD-HH`.

Files in `filesRotateByHour` won't be rotated by day.

If `file` is relative path, then will normalize to `path.join(this.app.config.logger.dir, file)`.

## Customize

You can use `app.LogRotator` to customize.

```js
// app/schedule/custom.js
module.exports = app => {
  const rotator = getRotator(app);
  return {
    // https://github.com/eggjs/egg-schedule
    schedule: {
      type: 'worker', // only one worker run this task
      cron: '10 * * * *', // custom cron, or use interval
    },
    async task() {
      await rotator.rotate();
    }
  };
};

function getRotator(app) {
  class CustomRotator extends app.LogRotator {
    // return map that contains a pair of srcPath and targetPath
    // LogRotator will rename ksrcPath to targetPath
    async getRotateFiles() {
      const files = new Map();
      const srcPath = '/home/admin/foo.log';
      const targetPath = '/home/admin/foo.log.2016.09.30';
      files.set(srcPath, { srcPath, targetPath });
      return files;
    }
  }
  return new CustomRotator({ app });
}
```

Define a method called `getRotateFiles`, return a map contains a pair of srcPath and targetPath.

## Questions & Suggestions

Please open an issue [here](https://github.com/eggjs/egg/issues).

## License

[MIT](https://github.com/eggjs/egg-logrotator/blob/master/LICENSE)

## Contributors

[![Contributors](https://contrib.rocks/image?repo=eggjs/egg-logrotator)](https://github.com/eggjs/egg-logrotator/graphs/contributors)

Made with [contributors-img](https://contrib.rocks).

---
_Source: https://npm.io/package/egg-logrotator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
