Skip to content

Commit 8107ee0

Browse files
committed
Add logger and log rid, sid and uid in every logs
1 parent 89be693 commit 8107ee0

File tree

8 files changed

+78
-48
lines changed

8 files changed

+78
-48
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"body-parser": "^1.17.2",
2828
"connect-dynamodb": "^2.0.0",
2929
"express": "^4.14.1",
30+
"express-request-id": "^1.4.0",
3031
"express-session": "^1.15.5",
3132
"prop-types": "^15.5.9",
3233
"react": "^15.4.2",

server/apis/auth.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,41 @@ import userDB from '../libs/userDB';
44

55
const file = 'server/apis/auth.js';
66

7-
const findOrCreateUser = async (fbUserInfo) => {
7+
const findOrCreateUser = async (logger, fbUserInfo) => {
88
try {
9-
let user = await userDB.findUserByFbId(fbUserInfo.id);
9+
let user = await userDB.findUserByFbId(logger, fbUserInfo.id);
1010

1111
if (!user) {
12-
user = await userDB.createUser(fbUserInfo);
12+
user = await userDB.createUser(logger, fbUserInfo);
1313
}
1414

1515
return user;
1616
} catch(err) {
17-
console.log({ file, function: 'auth.findOrCreateUser', err });
17+
logger.info({ file, function: 'findOrCreateUser', err });
1818
throw err;
1919
}
2020
};
2121

2222
const signin = async (req) => {
2323
const fbToken = req.body.fbToken;
2424

25-
console.log({ file, function: 'signin', fbToken });
25+
req.log.info({ file, function: 'signin', fbToken });
2626

2727
if (!fbToken) {
28-
console.log({ file, function: 'signin', log: 'invalid fbToken' });
28+
req.log.info({ file, function: 'signin', log: 'invalid fbToken' });
2929
throw new Error('invalid fbToken');
3030
}
3131

32-
const fbUserInfo = await facebook.getUserInfo(fbToken);
33-
console.log({ file, function: 'signin', fbUserInfo });
32+
const fbUserInfo = await facebook.getUserInfo(req.log, fbToken);
33+
req.log.info({ file, function: 'signin', fbUserInfo });
3434

3535
if (!fbUserInfo.id) {
36-
console.log({ file, function: 'signin', log: 'failed to fetch user info from facebook' });
36+
req.log.info({ file, function: 'signin', log: 'failed to fetch user info from facebook' });
3737
throw new Error('failed to fetch user information from facebook');
3838
}
3939

40-
const user = await findOrCreateUser(fbUserInfo);
41-
console.log({ file, function: 'signin', user });
40+
const user = await findOrCreateUser(req.log, fbUserInfo);
41+
req.log.info({ file, function: 'signin', user });
4242

4343
const result = {
4444
uid: user.id,

server/app.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var express = require('express');
44
var path = require('path');
55

66
import bodyParser from 'body-parser';
7+
import expressRequestId from 'express-request-id';
78
import React from 'react';
89
import { renderToString } from 'react-dom/server';
910
import { StaticRouter } from 'react-router-dom';
@@ -12,6 +13,7 @@ import { Provider } from 'react-redux';
1213
import createReduxStore from '../modules/store';
1314

1415
import auth from './apis/auth';
16+
import logger from './libs/logger';
1517
import session from './libs/session';
1618
import userMiddleware from './libs/userMiddleware';
1719

@@ -21,20 +23,22 @@ const file = 'server/app.js';
2123

2224
const app = express();
2325

26+
app.use(expressRequestId());
2427
app.use(bodyParser.json()); // for parsing POST body
2528
app.use(session.createSessionMiddleware());
29+
app.use(logger);
2630
app.use(express.static(path.join(__dirname, './public')));
2731

2832
const handleRequest = (req, res) => {
29-
console.log({ file, function: 'handleRequest', url: req.url, session: req.session, user: req.user });
33+
req.log.info({ file, function: 'handleRequest', url: req.url, session: req.session, user: req.user });
3034

3135
const context = {};
3236

3337
// counter in session for demo
3438
if (!req.session.counter) req.session.counter = 0;
3539
req.session.counter++;
3640

37-
const initialState = session.createInitialReduxState(req.session, req.user);
41+
const initialState = session.createInitialReduxState(req.log, req.session, req.user);
3842
const store = createReduxStore(initialState);
3943

4044
const appHtml = renderToString(
@@ -55,7 +59,7 @@ const handleRequest = (req, res) => {
5559
};
5660

5761
app.get('*', (req, res) => {
58-
console.log({ file, function:'get *', url: req.url, session: req.session });
62+
req.log.info({ file, function:'get *', url: req.url, session: req.session });
5963

6064
// Call userMiddleware here only rather than register it by app.use().
6165
// It is to reduce uncessary user db call.
@@ -65,18 +69,18 @@ app.get('*', (req, res) => {
6569
});
6670

6771
app.post('/signin', (req, res) => {
68-
console.log({ file, function:'post', req: { url: req.url } });
72+
req.log.info({ file, function:'post', req: { url: req.url } });
6973

7074
auth.signin(req)
7175
.then((result) => res.send(result))
7276
.catch((error) => {
73-
console.log({ file, function: 'post', error });
77+
req.log.info({ file, function: 'post', error });
7478
res.status(403).send(error);
7579
});
7680
});
7781

7882
app.post('/signout', (req, res) => {
79-
console.log({ function:'app.post', req: { url: req.url } });
83+
req.log.info({ function:'app.post', req: { url: req.url } });
8084

8185
res.send(auth.signout(req, res));
8286
});

server/libs/facebook.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import axios from 'axios';
22

3-
const getUserInfo = async (fbToken) => {
3+
const getUserInfo = async (logger, fbToken) => {
44
const urlMe = 'https://graph.facebook.com/me';
55

66
try {
@@ -10,7 +10,7 @@ const getUserInfo = async (fbToken) => {
1010
},
1111
});
1212

13-
console.log({ function: 'facebook.getUserInfo', meRes: meRes.data });
13+
logger.info({ function: 'facebook.getUserInfo', meRes: meRes.data });
1414

1515
const picUrl = 'https://graph.facebook.com/' + meRes.data.id + '/picture';
1616
const picRes = await axios.get(picUrl, {
@@ -19,15 +19,15 @@ const getUserInfo = async (fbToken) => {
1919
},
2020
});
2121

22-
console.log({ function: 'facebook.getUserInfo', picRes: picRes.data });
22+
logger.info({ function: 'facebook.getUserInfo', picRes: picRes.data });
2323

2424
return {
2525
id: meRes.data.id,
2626
name: meRes.data.name,
2727
picture: picRes.data.data.url,
2828
};
2929
} catch (err) {
30-
console.error({ function: 'facebook.getUserInfo', err });
30+
logger.error({ function: 'facebook.getUserInfo', err });
3131

3232
return {};
3333
}

server/libs/logger.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import assert from 'assert';
2+
3+
export default (req, res, next) => {
4+
const basic = {
5+
rid: req.id,
6+
sid: req.sessionID,
7+
uid: req.session.uid,
8+
};
9+
10+
const logFunc = (consoleFunc) => (log) => {
11+
assert(typeof log === 'object');
12+
if (log.rid || log.sid || log.uid) {
13+
console.warn({ warn: 'rid, sid and uid shouldn\'t be passed to log function.', log });
14+
}
15+
16+
consoleFunc(Object.assign(basic, log));
17+
};
18+
19+
req.log = {
20+
info: logFunc(console.log),
21+
error: logFunc(console.error),
22+
};
23+
24+
next();
25+
};

server/libs/session.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import session from 'express-session';
44

55
const file = 'server/libs/session.js';
66

7-
const createInitialReduxState = (session, user) => {
7+
const createInitialReduxState = (logger, session, user) => {
88
const state = {
99
sessionCounter: {
1010
counter: session.counter,
@@ -20,7 +20,7 @@ const createInitialReduxState = (session, user) => {
2020
};
2121
}
2222

23-
console.log({ file, function: 'createInitialReduxState', state });
23+
logger.info({ file, function: 'createInitialReduxState', state });
2424

2525
return state;
2626
};
@@ -53,14 +53,14 @@ const createSessionMiddleware = () => {
5353

5454
sessionOption.store = new DynamoDBStore(dynamoDBOptions);
5555
} else {
56-
console.log({ function: 'getSessionOption', log: 'session will be stored in memory' });
56+
console.log({ file, function: 'getSessionOption', log: 'session will be stored in memory' });
5757
}
5858

5959
return session(sessionOption);
6060
};
6161

6262
const update = (req, data) => {
63-
console.log({ file, function: 'update', data });
63+
req.log.info({ file, function: 'update', data });
6464

6565
req.session = Object.assign(req.session, data);
6666
};

server/libs/userDB.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const docClient = () => {
1818
return _docClient;
1919
};
2020

21-
const createUser = (fbUserInfo) => new Promise((resolve, reject) => {
21+
const createUser = (logger, fbUserInfo) => new Promise((resolve, reject) => {
2222
var params = {
2323
TableName: awsConfig.dynamodb.userTableName,
2424
Item: {
@@ -31,16 +31,16 @@ const createUser = (fbUserInfo) => new Promise((resolve, reject) => {
3131

3232
docClient().put(params, function(err, data) {
3333
if (err) {
34-
console.error({ file, function: 'userDB.createUser', params, err });
34+
logger.error({ file, function: 'userDB.createUser', params, err });
3535
return reject(err);
3636
}
3737

38-
console.log({ file, function: 'userDB.createUser', params, data });
38+
logger.info({ file, function: 'userDB.createUser', params, data });
3939
return resolve(data);
4040
});
4141
});
4242

43-
const findFbIdIndex = (fbId) => new Promise((resolve, reject) => {
43+
const findFbIdIndex = (logger, fbId) => new Promise((resolve, reject) => {
4444
const params = {
4545
TableName : awsConfig.dynamodb.userTableName,
4646
IndexName: awsConfig.dynamodb.userIndexName,
@@ -52,71 +52,71 @@ const findFbIdIndex = (fbId) => new Promise((resolve, reject) => {
5252

5353
docClient().query(params, function(err, data) {
5454
if (err) {
55-
console.error({ file, function: 'findFbIdIndex', params, err });
55+
logger.error({ file, function: 'findFbIdIndex', params, err });
5656
return reject(err);
5757
}
5858

5959
if (data.Count > 1) {
60-
console.error({ file, function: 'findFbIdIndex',
60+
logger.error({ file, function: 'findFbIdIndex',
6161
log: 'multiple user rows with the same fbid detected', params, data,
6262
});
6363
}
6464

65-
console.log({ file, function: 'findFbIdIndex', data, items: data.Items });
65+
logger.info({ file, function: 'findFbIdIndex', data, items: data.Items });
6666

6767
return resolve(data.Items[0]);
6868
});
6969
});
7070

71-
const findUserTable = (id) => new Promise((resolve, reject) => {
71+
const findUserTable = (logger, id) => new Promise((resolve, reject) => {
7272
const params = {
7373
TableName: awsConfig.dynamodb.userTableName,
7474
Key: {
7575
id,
7676
},
7777
};
7878

79-
console.log({ file, function: 'findUserTable', params });
79+
logger.info({ file, function: 'findUserTable', params });
8080

8181
docClient().get(params, function(err, data) {
8282
if (err) {
83-
console.error({ file, function: 'findUserTable', params, err });
83+
logger.error({ file, function: 'findUserTable', params, err });
8484
return reject(err);
8585
}
8686

87-
console.log({ file, function: 'findUserTable', params, data });
87+
logger.info({ file, function: 'findUserTable', params, data });
8888

8989
return resolve(data.Item);
9090
});
9191
});
9292

93-
const findUser = async (id) => {
93+
const findUser = async (logger, id) => {
9494
try {
9595
const user = await findUserTable(id);
9696

97-
console.log({ file, function: 'findUser', id, user });
97+
logger.info({ file, function: 'findUser', id, user });
9898

9999
return user;
100100
} catch(err) {
101-
console.error({ file, function: 'findUser', id, err });
101+
logger.error({ file, function: 'findUser', id, err });
102102

103103
return null;
104104
}
105105
};
106106

107-
const findUserByFbId = async (fbId) => {
107+
const findUserByFbId = async (logger, fbId) => {
108108
try {
109-
const fbIdUser = await findFbIdIndex(fbId);
109+
const fbIdUser = await findFbIdIndex(logger, fbId);
110110

111111
if (!fbIdUser || !fbIdUser.id) return null;
112112

113-
const user = await findUserTable(fbIdUser.id);
113+
const user = await findUserTable(logger, fbIdUser.id);
114114

115-
console.log({ file, function: 'findUserByFbId', fbId, user });
115+
logger.info({ file, function: 'findUserByFbId', fbId, user });
116116

117117
return user;
118118
} catch(err) {
119-
console.error({ file, function: 'findUserByFbId', fbId, err });
119+
logger.error({ file, function: 'findUserByFbId', fbId, err });
120120

121121
return null;
122122
}

server/libs/userMiddleware.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ const file = 'server/libs/userMiddleware.js';
55
export default async (req) => {
66
const uid = req.session.uid;
77

8-
console.log({ file, function: 'default', url: req.url, uid });
8+
req.log.info({ file, function: 'default', url: req.url, uid });
99

1010
if (!uid) return null;
1111

1212
try {
13-
const user = await userDB.findUser(uid);
13+
const user = await userDB.findUser(req.log, uid);
1414
req.user = user;
15-
console.log({ file, function: 'default', user });
15+
req.log.info({ file, function: 'default', user });
1616
return null;
1717
} catch(err) {
18-
console.error({ file, function: 'default', err });
18+
req.log.error({ file, function: 'default', err });
1919
return null;
2020
}
2121
};

0 commit comments

Comments
 (0)