Reputation: 767
Hi i have a requirement from our production team, I need to create the logs hourly, I know that winston support daily, but this doesn't help me. It is possible to do this?
Upvotes: 7
Views: 7223
Reputation: 2461
UPDATED As @Tom has mentioned rotating Logs has moved out of winston and loaded if required
npm install winston-daily-rotate-file
Code sample
const winston = require('winston')
require('winston-daily-rotate-file');
const path = require('path');
let transports = [];
const { createLogger } = winston;
transports.push(
new winston.transports.DailyRotateFile({
name: 'file',
datePattern: 'YYYY-MM-DD-THH-mm',
filename: path.join(__dirname, 'rotate_logs', 'log_file.log')
})
)
var logger = createLogger({ transports: transports })
Full Example if want to test the above code
dataLog(0)
function dataLog(secondsPassed){
setTimeout(function(){
let dateNow = new Date();
logger.info(`seconds passed ${secondsPassed} and Time is ${dateNow}`);
console.log(`${secondsPassed}`);
if(dataLog != 130){ //when reaches 130 seconds stops logging
dataLog(++secondsPassed);
}
},1000);
}
The result files mentioned in the attached image
EXTRA: I have created winston examples with different use cases, Might be helpful https://github.com/shivashanmugam/node-lab/blob/master/winston/index.js
Upvotes: 2
Reputation: 26819
You can rotate Winston logs hourly. You need to provide hour (HH
) in date pattern.
Please check the sample code below:
var winston = require ('winston');
var path = require ('path');
var transports = [];
transports.push(new winston.transports.DailyRotateFile({
name: 'file',
datePattern: '.yyyy-MM-ddTHH',
filename: path.join("some_path", "log_file_name.log")
}));
var logger = new winston.Logger({transports: transports});
// ... and logging
logger.info("some info log ...", {extraData: 'abc'});
File names will be as follows: log_file_name.log.2013-12-17T16
, log_file_name.log.2013-12-17T17
etc.
I hope that will help.
Upvotes: 10