Winston logs rotation based on time
In this post, I am sharing how to rotate Winston log files based on time and date pattern.
Among many different logging transports, Winston provides winston.transports.DailyRotateFile
transport class for outputting to a local log file and rotating the log file based on time, e.g., every year, day, hour, etc.
Rolling time depends on datePattern
option provided to DailyRotateFile
instance. Note that the date pattern will become a suffix of a log file.
In the following example log files will be rotated every hour:
var winston = require('winston'),
path = require('path'),
transports = []
transports.push(
new winston.transports.DailyRotateFile({
name: 'file',
datePattern: '.yyyy-MM-ddTHH',
filename: path.join(__dirname, 'logs', 'log_file.log'),
}),
)
var logger = new winston.Logger({ transports: transports })
// ... and logging
logger.info('log information', { extraData: 'somve_value' })
As mentioned above, log file names is composed of log file name from filename
option and suffix from datePattern
option e.g. log_file.log.2013-12-17T16
, log_file.log.2013-12-17T17
.
Default date pattern is .yyyy-MM-dd which rotate logs file every day at midnight.
Available date pattern tokens
All available date pattern tokens which can be used in datePattern
option are as follows:
yy
- last two digits of the current year e.g. 14 for 2014yyyy
- year (4 digits) e.g. 2014M
- unpadded month e.g. 1 for January, 12 for DecemberMM
- padded month (starting from 1) e.g. 01 for January, 12 for Decemberd
- unpadded day of a month e.g. 1 for 1st, 10 for 10thdd
- padded day of a month e.g. 01 for 1st, 10 for 10thH
- unpadded hour e.g. 1 for 1 AMHH
- padded hour e.g. 01 for 1 AMm
- unpadded minute e.g. 0, 1, 2, … 58, 59mm
- padded minute e.g. 00, 01, 02, … 58, 59
Note that you can’t rotate files more frequent then every minute, e.g., every second, using winston.transports.DailyRotateFile
class.
You can also refer to Stack Overflow It is possible to do hourly log rotation in Winston? question discussing the same problem.
NPM module support Back in November 2015, winston-daily-rotate-file npm module was created. Apart from the ability to rotate files by a minute, hour, day, month, a year or weekday it has some extra useful features like gzip archived log files, etc.