Reputation: 49
I have the same problem and want the same result as in here: Outputting Logs inside JSON Object with Winston in Node.js
But I use winston-daily-rotate-file and therefore the given answer/ solution does not work in my case.
My logger looks like this:
const path = require('path');
const { createLogger, format, transports, addColors, config } = require('winston');
const winstonDailyRotateFile = require('winston-daily-rotate-file');
const { combine, timestamp, json, colorize, label, printf, errors } = format;
const CustomTransport = require('./customtransport')
const customLevels = {
levels: {
error: 0,
warn: 1,
fileProcessed: 2,
info: 3,
debug: 4,
silly: 5,
},
colors: {
error: 'bold red',
warn: 'bold yellow',
fileProcessed: 'bold blue',
info: 'bold cyan',
debug: 'bold gray',
silly: 'bold magenta'
}
};
addColors(customLevels.colors);
const consoleFormat = printf(({ level, message, label, stack }) => {
const log = `${level}: [${label}] ${message}`;
const errLog = `${log}\n${stack}`;
return stack ? errLog : log;
});
module.exports = (module) => {
const logger = createLogger({
levels: customLevels.levels,
transports: [
new CustomTransport({
}),
new winstonDailyRotateFile({
format: combine(
errors({stack: true}),
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
label({ label: path.basename(module.filename) }),
json(),
),
dirname: './logs',
filename: 'sppa-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
// If we're not in production then log to the `console`
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
levels: customLevels.levels,
level: 'silly',
format: combine(
colorize(),
errors({stack: true}),
label({ label: path.basename(module.filename) }),
consoleFormat
),
}));
}
return logger;
}
Any help would be greatey appreciated!
Upvotes: 0
Views: 520
Reputation: 49
I used a workaround with regex now where I replaced newlines with a comma and added [ ] around the file. It looks like this:
app.get("/log", (req, res) => {
fs.readFile('C:\\Path\\To\\nodeAPI\\logs\\test.log', function (err, data) {
if (err) {
console.log(err);
}
let content = data.toString('utf8').replace(/\r?\n|\r/g, ',');
content = "[" + content + "]";
res.send(content);
});
});
Upvotes: 1