Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keep original file extension when rotation occurs (e.g. .error files) #161

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 2 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,7 @@

## Description

PM2 module to automatically rotate logs of processes managed by PM2.
I CREATED THIS BRANCH TO FIX ISSUE #160 (https://github.com/keymetrics/pm2-logrotate/issues/160).

## Install
See pull request #161 (https://github.com/keymetrics/pm2-logrotate/pull/161) for details.

pm2 install pm2-logrotate

**NOTE:** the command is `pm2 install` NOT `npm install`

## Configure

- `max_size` (Defaults to `10M`): When a file size becomes higher than this value it will rotate it (its possible that the worker check the file after it actually pass the limit) . You can specify the unit at then end: `10G`, `10M`, `10K`
- `retain` (Defaults to `30` file logs): This number is the number of rotated logs that are keep at any one time, it means that if you have retain = 7 you will have at most 7 rotated logs and your current one.
- `compress` (Defaults to `false`): Enable compression via gzip for all rotated logs
- `dateFormat` (Defaults to `YYYY-MM-DD_HH-mm-ss`) : Format of the data used the name the file of log
- `rotateModule` (Defaults to `true`) : Rotate the log of pm2's module like other apps
- `workerInterval` (Defaults to `30` in secs) : You can control at which interval the worker is checking the log's size (minimum is `1`)
- `rotateInterval` (Defaults to `0 0 * * *` everyday at midnight): This cron is used to a force rotate when executed.
We are using [node-schedule](https://github.com/node-schedule/node-schedule) to schedule cron, so all valid cron for [node-schedule](https://github.com/node-schedule/node-schedule) is valid cron for this option. Cron style :
- `TZ` (Defaults to system time): This is the standard [tz database timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) used to offset the log file saved. For instance, a value of `Etc/GMT+1`, with an hourly log, will save a file at hour `14` GMT with hour `13` (GMT+1) in the log name.

```
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
```

### How to set these values ?

After having installed the module you have to type :
`pm2 set pm2-logrotate:<param> <value>`

e.g:
- `pm2 set pm2-logrotate:max_size 1K` (1KB)
- `pm2 set pm2-logrotate:compress true` (compress logs when rotated)
- `pm2 set pm2-logrotate:rotateInterval '*/1 * * * *'` (force rotate every minute)
7 changes: 6 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,12 @@ function proceed(file) {
// use default
}
}
var final_name = file.substr(0, file.length - 4) + '__' + final_time + '.log';
// Get base file name - i.e. without file extension : remove everything after the last dot (up to then end of string)
var base_file_name = file.replace(/\.[^\.]+$/, '')
// Get file extension : replace everything by string after the last dot
var file_ext = file.replace(/^.*\.([^\.]*)$/i, '$1')
// Build final filename with base + time + extension
var final_name = base_file_name + '__' + final_time + '.' + file_ext;
// if compression is enabled, add gz extention and create a gzip instance
if (COMPRESSION) {
var GZIP = zlib.createGzip({ level: zlib.Z_BEST_COMPRESSION, memLevel: zlib.Z_BEST_COMPRESSION });
Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "pm2-logrotate",
"version": "2.7.0",
"description": "Module to rotate logs of every pm2 application",
"version": "1.0.0",
"description": "Module to rotate logs of every pm2 application - derived from pm2-logrotate 2.7.0",
"main": "app.js",
"dependencies": {
"graceful-fs": "^4.2.2",
Expand All @@ -13,15 +13,15 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Joni SHKURTI",
"author": "Joni SHKURTI and EDot",
"repository": {
"type": "git",
"url": "git+https://github.com/pm2-hive/pm2-logrotate.git"
"url": "git+https://github.com/e-dot/pm2-logrotate.git"
},
"bugs": {
"url": "https://github.com/pm2-hive/pm2-logrotate/issues"
"url": "https://github.com/e-dot/pm2-logrotate/issues"
},
"homepage": "https://github.com/pm2-hive/pm2-logrotate",
"homepage": "https://github.com/e-dot/pm2-logrotate",
"license": "MIT",
"apps": [
{
Expand Down