摩根,皮诺是node.js日志中间件。我想将日志导出到AWS cloudWatchLogs。
例如
morgan
for express
var express = require('express');
var loggerM= require('morgan');
var app = express();
app.use(logger('dev'));
使用此设置,您可以在终端上看到日志。但是它只能显示在终端上,我不知道如何获得日志字符串,我必须获得日志字符串才能将它传输到云上。
我目前只找到stream
方法,该方法只能直接保存到本地文件中:
const appLogStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' })
app.use(morgan('combined', { stream: appLogStream}));
AWS clouldWatchLogs putLogEvents
api:
var params = {
logEvents: [ /* required */
{
message: 'STRING_VALUE', /* required */
timestamp: 'NUMBER_VALUE' /* required */
},
/* more items */
],
logGroupName: 'STRING_VALUE', /* required */
logStreamName: 'STRING_VALUE', /* required */
sequenceToken: 'STRING_VALUE'
};
cloudwatchlogs.putLogEvents(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
参数消息可以填充日志信息。
发布于 2022-04-08 06:53:36
因为morgan为我们提供了将日志流附加到生成日志的选项。我们可以使用它来编写日志到cloudwatch日志。但是,我们如何获得连接到aws云监视的流呢?
我们可以这样做:
//Create a logger using winston
var winston = require('winston'),
CloudWatchTransport = require('winston-aws-cloudwatch');
const auth = require('./config/auth');
//add console transport to logger ---> logs to machine console
const logger = new winston.createLogger({
transports: [
new (winston.transports.Console)({
timestamp: true,
colorize: true,
})
]
});
//below config creates a new log stream (snippet) in the same log gp specified at every new version of deployment
var config = {
logGroupName: 'server-log-gp', //your aws cloudwatch log gp name
logStreamName: `app.${new Date().getTime()}`, //log stream name
createLogGroup: false,
createLogStream: true, //creates new stream at deployment
awsConfig: {
accessKeyId: auth.aws.accessKeyId,
secretAccessKey: auth.aws.secretAccessKey,
region: auth.aws.region
},
formatLog: function (item) {
return item.level + ': ' + item.message + ' ' + JSON.stringify(item.meta)
}
}
//add cloudwatch logs transport to logger only in production mode
//may add in dev mode as well if you want
if (process.env.NODE_ENV === 'production') logger.add(new CloudWatchTransport(config));
logger.level = process.env.LOG_LEVEL || "silly";
logger.stream = {
write: function(message, encoding) {
logger.info(message);
}
};
现在您需要添加morgan作为中间件,并将上面的logger.stream附加到它。
app.use(
require('morgan')(
'dev',
{ stream: logger.stream }
)
);
请参阅此参考资料:
https://stackoverflow.com/questions/64440528
复制相似问题