使用 Node.js 中的 Winston 和 Winston-Daily-Rotate-File 在 JSON 对象中输出日志
Outputting Logs inside JSON Object with Winston and Winston-Daily-Rotate-File in Node.js
我遇到了同样的问题,想要得到与此处相同的结果:
但我使用的是 winston-daily-rotate-file,因此给定的答案/解决方案不适用于我的情况。
我的记录器看起来像这样:
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;
}
如有任何帮助,我们将不胜感激!
我现在使用正则表达式的解决方法,我用逗号替换换行符并在文件周围添加 [ ]。它看起来像这样:
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);
});
});
我遇到了同样的问题,想要得到与此处相同的结果:
但我使用的是 winston-daily-rotate-file,因此给定的答案/解决方案不适用于我的情况。
我的记录器看起来像这样:
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;
}
如有任何帮助,我们将不胜感激!
我现在使用正则表达式的解决方法,我用逗号替换换行符并在文件周围添加 [ ]。它看起来像这样:
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);
});
});