首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Nodejs日志中间件中记录到AWS CloudWatch日志(例如: morgan,pino)

在Nodejs日志中间件中记录到AWS CloudWatch日志(例如: morgan,pino)
EN

Stack Overflow用户
提问于 2020-10-20 07:34:00
回答 1查看 1.8K关注 0票数 2

摩根皮诺是node.js日志中间件。我想将日志导出到AWS cloudWatchLogs。

例如

morgan for express

代码语言:javascript
运行
复制
var express = require('express');
var loggerM= require('morgan');
var app = express();
app.use(logger('dev'));

使用此设置,您可以在终端上看到日志。但是它只能显示在终端上,我不知道如何获得日志字符串,我必须获得日志字符串才能将它传输到云上。

我目前只找到stream方法,该方法只能直接保存到本地文件中:

代码语言:javascript
运行
复制
const appLogStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' })
app.use(morgan('combined', { stream: appLogStream}));

AWS clouldWatchLogs putLogEvents api:

代码语言:javascript
运行
复制
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
});

参数消息可以填充日志信息。

EN

回答 1

Stack Overflow用户

发布于 2022-04-08 06:53:36

因为morgan为我们提供了将日志流附加到生成日志的选项。我们可以使用它来编写日志到cloudwatch日志。但是,我们如何获得连接到aws云监视的流呢?

我们可以这样做:

代码语言:javascript
运行
复制
//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附加到它。

代码语言:javascript
运行
复制
app.use(
  require('morgan')(
    'dev',
    { stream: logger.stream }
  )
);

请参阅此参考资料:

Node.js -日志/使用摩根和温斯顿

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64440528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档