-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.js
88 lines (74 loc) · 2.14 KB
/
logger.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const { createLogger, format, transports } = require('winston');
const { combine, splat, timestamp, printf } = format;
const NODE_ENV = process.env.NODE_ENV || 'development';
const CloudWatchTransport = require('winston-aws-cloudwatch');
const SlackHook = require('winston-slack-webhook-transport');
const myFormat = printf( ({ level, message, timestamp , ...metadata}) => {
let msg = `${timestamp} [${level}] : ${message} `;
if (metadata.length) {
msg += JSON.stringify(metadata);
}
return msg;
});
const slackFormatter = ({ level, message, timestamp , ...metadata}) => {
let fields = [];
fields.push({type: "mrkdwn", text: message});
if (metadata.length) {
fields.push({ type: "mrkdwn", text: JSON.stringify(metadata) });
}
return {
blocks: [
{
type: 'context',
elements: [{
type: 'mrkdwn',
text: `${process.env.APP_NAME} ${level}`,
}]
},
{
"type": "divider"
},
{
type: 'section',
fields: fields
},
]
}
};
const consoleConfig = {
format: combine(
format.colorize(),
splat(),
timestamp(),
myFormat
),
};
const cloudWatchConfig = {
logGroupName: process.env.CLOUDWATCH_LOG_GROUP,
logStreamName: NODE_ENV,
createLogGroup: false,
createLogStream: true,
awsConfig: {
accessKeyId: process.env.CLOUDWATCH_ACCESS_KEY_ID,
secretAccessKey: process.env.CLOUDWATCH_SECRET_ACCESS_KEY,
region: process.env.CLOUDWATCH_REGION
},
};
const logger = createLogger({
transports: [
new transports.Console(consoleConfig) ]
});
if (NODE_ENV === 'production') {
logger.add(new CloudWatchTransport(cloudWatchConfig));
logger.add(new SlackHook({
webhookUrl: process.env.SLACK_WEBHOOK_URL,
formatter: slackFormatter
}));
}
logger.level = process.env.LOG_LEVEL || "silly";
logger.stream = {
write: function(message, encoding) {
logger.info(message);
}
};
module.exports = logger;