1. Amazon SQS
1.1 安装aws-sdk
npm install aws-sdk --save
1.2 导入相应包
const aws = require('aws-sdk')
const sqs = new aws.SQS({region: process.env.AWS_REGION})
1.3 获取消息长度
sqs.getQueueAttributes(
{
QueueUrl: process.env.QUEUE_URL,
AttributeNames: ['ApproximateNumberOfMessages']
},
function (err,data){
if(err){
throw err;
}else{
const numEvents = data.Attributes.ApproximateNumberOfMessages;
}
}
);
1.4 抓取消息
sqs.receiveMessage({
QueueUrl: process.env.QUEUE_URL,
MaxNumberOfMessages: 1,
VisibilityTimeout: 60,
WaitTimeSeconds: 10
},
function (err,data){
if(err){
throw err;
}else if(data && data.Messages){
}else{
}
});
1.5 删除消息
sqs.deleteMessage({
QueueUrl: process.env.QUEUE_URL,
ReceiptHandle: message.ReceiptHandle
}, function (err, data) {
if (err) {
throw err;
} else {
}
});
2. AWS CloudWatch
2.1 安装中间件
npm install winston-cloudwatch --save
2.2 核心代码
const cloudwatchConfig = new WinstonCloudWatch({
logGroupName: process.env.LOG_CLOUDWATCH_GROUP_NAME,//REQUIRED
logStreamName: process.env.LOG_CLOUDWATCH_IMPORT_STREAM_NAME,//REQUIRED
awsAccessKeyId: process.env.LOG_CLOUDWATCH_ACCESS_KEY,
awsSecretKey: process.env.LOG_CLOUDWATCH_SECRET_ACCESS_KEY,
awsRegion: process.env.LOG_CLOUDWATCH_REGION,
messageFormatter:(item) =>{
let meta = item.metadata
let message = item.message
let label = item.label
let level = 'info'
if(item.level.includes('debug')){
item = 'debug'
}
if(item.level.includes('warn')){
level = 'warn'
}
if(item.level.includes('error')){
level = 'error'
}
if(meta !=undefined && meta != null){
let out = ``
Object.keys(meta).forEach(function (key){
out += `[` + meta[key] + `]`
})
return `[${label}]` + out + `${level}:${message}`
}else{
return `[${label}]${level}:${message}`
}
}
})
logger.add(cloudwatchConfig)
详细代码
const winston = require('winston');
const AWS = require('aws-sdk');
const WinstonCloudWatch = require('winston-cloudwatch');
AWS.config.update({
region: process.env.LOG_RIGION_NAME,
});
const consoleTransport = new winston.transports.Console({
level: 'debug',
silent: false
});
let logger = winston.createLogger({
level: 'info',
exitOnError: false,
format: winston.format.combine(
winston.format.label({ label: 'test' }),
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.colorize(),
winston.format.splat(),
winston.format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }),
winston.format.printf((info) => {
let out = ``;
if (Object.keys(info.metadata).length > 0) {
Object.keys(info.metadata).forEach(function (key){
out += `[` + info.metadata[key] + `]`;
});
return `${info.timestamp}[${info.label}]` + out + `${info.level}:${info.message}`;
} else {
return `${info.timestamp}[${info.label}]${info.level}:${info.message}`;
}
}),
),
transports: [consoleTransport]
});
const cloudwatchConfig = new WinstonCloudWatch({
logGroupName: process.env.LOG_CLOUDWATCH_GROUP_NAME,
logStreamName: process.env.LOG_CLOUDWATCH_IMPORT_STREAM_NAME,
awsAccessKeyId: process.env.LOG_CLOUDWATCH_ACCESS_KEY,
awsSecretKey: process.env.LOG_CLOUDWATCH_SECRET_ACCESS_KEY,
awsRegion: process.env.LOG_CLOUDWATCH_REGION,
messageFormatter:(item) =>{
let meta = item.metadata;
let message = item.message;
let label = item.label;
let level = 'info';
if(item.level.includes('debug')){
item = 'debug';
}
if(item.level.includes('warn')){
level = 'warn';
}
if(item.level.includes('error')){
level = 'error';
}
if(meta !=undefined && meta != null){
let out = ``;
Object.keys(meta).forEach(function (key){
out += `[` + meta[key] + `]`;
});
return `[${label}]` + out + `${level}:${message}`;
}else{
return `[${label}]${level}:${message}`;
}
}
});
logger.add(cloudwatchConfig);
module.exports = logger;