Skip to content
This repository was archived by the owner on Aug 1, 2021. It is now read-only.

Commit e2a8a14

Browse files
committed
Add loggin layer
1 parent 7f35f7f commit e2a8a14

File tree

10 files changed

+75
-26
lines changed

10 files changed

+75
-26
lines changed

src/api/middlewares/attachCurrentUser.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { IUser } from '../../interfaces/IUser';
99
* @param {*} next Express next Function
1010
*/
1111
const attachCurrentUser = async (req, res, next) => {
12+
const Logger = Container.get('logger');
1213
try {
1314
const UserModel = Container.get('userModel') as mongoose.Model<IUser & mongoose.Document>;
1415
const userRecord = await UserModel.findById(req.token._id);
@@ -21,8 +22,8 @@ const attachCurrentUser = async (req, res, next) => {
2122
req.currentUser = currentUser;
2223
return next();
2324
} catch (e) {
24-
console.log('🔥 Error attaching user to req');
25-
console.log(e);
25+
Logger.warn('🔥 Error attaching user to req');
26+
Logger.warn(e);
2627
return next(e);
2728
}
2829
};

src/api/routes/auth.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ export default (app: Router) => {
2020
}),
2121
}),
2222
async (req: Request, res: Response, next: NextFunction) => {
23+
const logger = Container.get('logger');
2324
try {
2425
const authServiceInstance = Container.get(AuthService);
2526
const { user, token } = await authServiceInstance.SignUp(req.body as IUserInputDTO);
2627
return res.json({ user, token }).status(201);
2728
} catch (e) {
28-
console.log('🔥 error ', e);
29+
logger.warn('🔥 error ', e);
2930
return next(e);
3031
}
3132
},
@@ -40,13 +41,14 @@ export default (app: Router) => {
4041
}),
4142
}),
4243
async (req: Request, res: Response, next: NextFunction) => {
44+
const Logger = Container.get('logger');
4345
try {
4446
const { email, password } = req.body;
4547
const authServiceInstance = Container.get(AuthService);
4648
const { user, token } = await authServiceInstance.SignIn(email, password);
4749
return res.json({ user, token }).status(200);
4850
} catch (e) {
49-
console.log('🔥 error ', e);
51+
Logger.warn('🔥 error ', e);
5052
return next(e);
5153
}
5254
},
@@ -62,11 +64,12 @@ export default (app: Router) => {
6264
* It's really annoying to develop that but if you had to, please use Redis as your data store
6365
*/
6466
route.post('/logout', middlewares.isAuth, (req: Request, res: Response, next: NextFunction) => {
67+
const Logger = Container.get('logger');
6568
try {
6669
//@TODO AuthService.Logout(req.user) do some clever stuff
6770
return res.status(200).end();
6871
} catch (e) {
69-
console.log('🔥 error ', e);
72+
Logger.warn('🔥 error ', e);
7073
return next(e);
7174
}
7275
});

src/app.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import config from './config';
44

55
import * as express from 'express';
66

7+
import Logger from './loaders/logger';
8+
79
async function startServer() {
810
const app = express();
911

@@ -17,11 +19,11 @@ async function startServer() {
1719

1820
app.listen(config.port, err => {
1921
if (err) {
20-
console.log(err);
22+
Logger.warn(err);
2123
process.exit(1);
2224
return;
2325
}
24-
console.log(`
26+
Logger.debug(`
2527
################################################
2628
🛡️ Server listening on port: ${config.port} 🛡️
2729
################################################

src/config/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ export default {
2828

2929
/**
3030
* Used by winston logger
31-
* @TODO Wait for it...
3231
*/
3332
logs: {
34-
level: process.env.LOG_LEVEL,
33+
level: process.env.LOG_LEVEL || 'debug',
3534
},
3635

3736
/**

src/jobs/emailSequence.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ import MailerService from '../services/mailer';
33

44
export default class EmailSequenceJob {
55
public async handler(job, done): Promise<void> {
6-
console.log('✌️ Email Sequence Job triggered!');
6+
const Logger = Container.get('logger');
77
try {
8+
Logger.debug('✌️ Email Sequence Job triggered!');
89
const { email, name }: { [key: string]: string } = job.data;
910
const mailerServiceInstance = Container.get(MailerService);
1011
await mailerServiceInstance.StartEmailSequence('WelcomeSequence', { email, name });
1112
done();
1213
} catch (e) {
13-
console.log('🔥 Error with Email Sequence Job');
14-
console.log(e);
14+
Logger.warn('🔥 Error with Email Sequence Job');
15+
Logger.warn(e);
1516
done(e);
1617
}
1718
}

src/loaders/dependencyInjector.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Container } from 'typedi';
2-
2+
import LoggerInstance from './logger';
33
import agendaFactory from './agenda';
44

55
export default ({ mongoConnection, models }: { mongoConnection; models: { name: string; model: any }[] }) => {
@@ -11,12 +11,13 @@ export default ({ mongoConnection, models }: { mongoConnection; models: { name:
1111
const agendaInstance = agendaFactory({ mongoConnection });
1212

1313
Container.set('agendaInstance', agendaInstance);
14+
Container.set('logger', LoggerInstance)
1415

15-
console.log('✌️ Agenda injected into container');
16+
LoggerInstance.debug('✌️ Agenda injected into container');
1617

1718
return { agenda: agendaInstance };
1819
} catch (e) {
19-
console.log('🔥 Error on dependency injector loader %o', e);
20+
LoggerInstance.debug('🔥 Error on dependency injector loader %o', e);
2021
throw e;
2122
}
2223
};

src/loaders/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import expressLoader from './express';
22
import dependencyInjectorLoader from './dependencyInjector';
33
import mongooseLoader from './mongoose';
44
import jobsLoader from './jobs';
5-
5+
import Logger from './logger';
66
export default async ({ expressApp }) => {
77
const mongoConnection = await mongooseLoader();
8-
console.log('✌️ DB loaded and connected!');
8+
Logger.debug('✌️ DB loaded and connected!');
99

1010
/**
1111
* WTF is going on here?
@@ -30,11 +30,11 @@ export default async ({ expressApp }) => {
3030
// whateverModel
3131
],
3232
});
33-
console.log('✌️ Dependency Injector loaded');
33+
Logger.debug('✌️ Dependency Injector loaded');
3434

3535
await jobsLoader({ agenda });
36-
console.log('✌️ Jobs loaded');
36+
Logger.debug('✌️ Jobs loaded');
3737

3838
await expressLoader({ app: expressApp });
39-
console.log('✌️ Express loaded');
39+
Logger.debug('✌️ Express loaded');
4040
};

src/loaders/logger.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import * as winston from 'winston';
2+
import config from '../config';
3+
4+
const transports = [];
5+
if(process.env.NODE_ENV !== 'development') {
6+
transports.push(
7+
new winston.transports.Console()
8+
)
9+
} else {
10+
transports.push(
11+
new winston.transports.Console({
12+
format: winston.format.combine(
13+
winston.format.cli(),
14+
winston.format.splat(),
15+
)
16+
})
17+
)
18+
}
19+
20+
const LoggerInstance = winston.createLogger({
21+
level: config.logs.level,
22+
levels: winston.config.npm.levels,
23+
format: winston.format.combine(
24+
winston.format.timestamp({
25+
format: 'YYYY-MM-DD HH:mm:ss'
26+
}),
27+
winston.format.errors({ stack: true }),
28+
winston.format.splat(),
29+
winston.format.json()
30+
),
31+
transports
32+
});
33+
34+
export default LoggerInstance;

src/services/auth.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import { IUser, IUserInputDTO } from '../interfaces/IUser';
88

99
@Service()
1010
export default class AuthService {
11-
constructor(@Inject('userModel') private userModel, private mailer: MailerService) {}
11+
constructor(
12+
@Inject('userModel') private userModel,
13+
private mailer: MailerService,
14+
@Inject('logger') private logger,
15+
) {}
1216

1317
public async SignUp(userInputDTO: IUserInputDTO): Promise<{ user: IUser; token: string }> {
1418
try {
@@ -56,7 +60,7 @@ export default class AuthService {
5660
Reflect.deleteProperty(user, 'salt');
5761
return { user, token };
5862
} catch (e) {
59-
console.log(e);
63+
this.logger.warn(e);
6064
throw e;
6165
}
6266
}

src/subscribers/user.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,24 @@ export default class UserSubscriber {
1818
*/
1919
@On(events.user.signIn)
2020
public onUserSignIn({ _id }: Partial<IUser>) {
21+
const Logger = Container.get('logger');
22+
2123
try {
2224
const UserModel = Container.get('UserModel') as mongoose.Model<IUser & mongoose.Document>;
2325

2426
UserModel.update({ _id }, { $set: { lastLogin: new Date() } });
2527
} catch (e) {
26-
console.log(`🔥 Error on event ${events.user.signIn}`);
27-
console.log(e);
28+
Logger.warn(`🔥 Error on event ${events.user.signIn}`);
29+
Logger.warn(e);
2830

2931
// Throw the error so the process die (check src/app.ts)
3032
throw e;
3133
}
3234
}
3335
@On(events.user.signUp)
3436
public onUserSignUp({ name, email, _id }: Partial<IUser>) {
37+
const Logger = Container.get('logger');
38+
3539
try {
3640
/**
3741
* @TODO implement this
@@ -42,8 +46,8 @@ export default class UserSubscriber {
4246
// Start your email sequence or whatever
4347
// MailService.startSequence('user.welcome', { email, name })
4448
} catch (e) {
45-
console.log(`🔥 Error on event ${events.user.signUp}`);
46-
console.log(e);
49+
Logger.warn(`🔥 Error on event ${events.user.signUp}`);
50+
Logger.warn(e);
4751

4852
// Throw the error so the process dies (check src/app.ts)
4953
throw e;

0 commit comments

Comments
 (0)