Skip to content

[Feat]: "Winston Logging" added. #2802

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@
"uuid": "^8.3.2",
"webpack": "^5.76.0",
"webpack-dev-middleware": "^5.3.1",
"xhr": "^2.6.0"
"xhr": "^2.6.0",
"winston" : "^3.11.0"
}
}
7 changes: 4 additions & 3 deletions server/config/passport.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import GoogleStrategy from 'passport-google-oauth20';
import { BasicStrategy } from 'passport-http';

import User from '../models/user';
import { logger } from '../logger/winston.js';

const accountSuspensionMessage =
'Account has been suspended. Please contact [email protected] if you believe this is an error.';

function generateUniqueUsername(username) {
const adj =
friendlyWords.predicates[
Math.floor(Math.random() * friendlyWords.predicates.length)
Math.floor(Math.random() * friendlyWords.predicates.length)
];
return slugify(`${username} ${adj}`);
}
Expand Down Expand Up @@ -274,7 +275,7 @@ passport.use(
User.EmailConfirmation.Verified;
existingEmailUser.save((saveErr) => {
if (saveErr) {
console.log(saveErr);
logger.debug(saveErr);
}
done(null, existingEmailUser);
});
Expand All @@ -288,7 +289,7 @@ passport.use(
user.verified = User.EmailConfirmation.Verified;
user.save((saveErr) => {
if (saveErr) {
console.log(saveErr);
logger.debug(saveErr);
}
done(null, user);
});
Expand Down
5 changes: 3 additions & 2 deletions server/controllers/aws.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import s3 from '@auth0/s3';
import mongoose from 'mongoose';
import { getProjectsForUserId } from './project.controller';
import { findUserByUsername } from './user.controller';
import { logger } from '../logger/winston.js';

const { ObjectId } = mongoose.Types;

Expand Down Expand Up @@ -230,8 +231,8 @@ export function listObjectsInS3ForUser(userId) {
return Promise.resolve({ assets: projectAssets, totalSize });
})
.catch((err) => {
console.log('got an error');
console.log(err);
logger.error('got an error');
logger.error(err);
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { logger } from '../../logger/winston.js';
import Collection from '../../models/collection';
import Project from '../../models/project';

Expand Down Expand Up @@ -49,7 +50,7 @@ export default function addProjectToCollection(req, res) {

return collection.save();
} catch (error) {
console.error(error);
logger.error(error);
sendFailure(500, error.message);
return null;
}
Expand Down
5 changes: 3 additions & 2 deletions server/controllers/file.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import isBefore from 'date-fns/isBefore';
import Project from '../models/project';
import { resolvePathToFile } from '../utils/filePath';
import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
import { logger } from '../logger/winston.js';

// Bug -> timestamps don't get created, but it seems like this will
// be fixed in mongoose soon
Expand All @@ -24,7 +25,7 @@ export function createFile(req, res) {
},
(err, updatedProject) => {
if (err || !updatedProject) {
console.log(err);
logger.error(err);
res.status(403).send({
success: false,
message: 'Project does not exist, or user does not match owner.'
Expand All @@ -35,7 +36,7 @@ export function createFile(req, res) {
updatedProject.files.id(req.body.parentId).children.push(newFile.id);
updatedProject.save((innerErr, savedProject) => {
if (innerErr) {
console.log(innerErr);
logger.error(innerErr);
res.json({ success: false });
return;
}
Expand Down
11 changes: 6 additions & 5 deletions server/controllers/project.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Project from '../models/project';
import User from '../models/user';
import { resolvePathToFile } from '../utils/filePath';
import generateFileSystemSafeName from '../utils/generateFileSystemSafeName';
import { logger } from '../logger/winston.js';

export {
default as createProject,
Expand Down Expand Up @@ -52,7 +53,7 @@ export function updateProject(req, res) {
.populate('user', 'username')
.exec((updateProjectErr, updatedProject) => {
if (updateProjectErr) {
console.log(updateProjectErr);
logger.error(updateProjectErr);
res.status(400).json({ success: false });
return;
}
Expand All @@ -70,7 +71,7 @@ export function updateProject(req, res) {
});
updatedProject.save((innerErr, savedProject) => {
if (innerErr) {
console.log(innerErr);
logger.error(innerErr);
res.status(400).json({ success: false });
return;
}
Expand Down Expand Up @@ -98,7 +99,7 @@ export function getProject(req, res) {
.populate('user', 'username')
.exec((err, project) => { // eslint-disable-line
if (err) {
console.log(err);
logger.error(err);
return res
.status(404)
.send({ message: 'Project with that id does not exist' });
Expand All @@ -115,7 +116,7 @@ export function getProjectsForUserId(userId) {
.select('name files id createdAt updatedAt')
.exec((err, projects) => {
if (err) {
console.log(err);
logger.error(err);
}
resolve(projects);
});
Expand Down Expand Up @@ -281,7 +282,7 @@ async function buildZip(project, req, res) {
});
res.end(buff);
} catch (err) {
console.error(err);
logger.error(err);
res.status(500).send(err);
}
}
Expand Down
3 changes: 2 additions & 1 deletion server/controllers/project.controller/createProject.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
FileValidationError,
ProjectValidationError
} from '../../domain-objects/Project';
import { logger } from '../../logger/winston.js';

export default function createProject(req, res) {
let projectValues = {
Expand Down Expand Up @@ -59,7 +60,7 @@ export function apiCreateProject(req, res) {

function checkUserHasPermission() {
if (req.user.username !== req.params.username) {
console.log('no permission');
logger.debug('no permission');
const error = new ProjectValidationError(
`'${req.user.username}' does not have permission to create for '${req.params.username}'`
);
Expand Down
3 changes: 2 additions & 1 deletion server/controllers/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import async from 'async';
import User from '../models/user';
import mail from '../utils/mail';
import { renderEmailConfirmation, renderResetPassword } from '../views/mail';
import { logger } from '../logger/winston.js';

export * from './user.controller/apiKey';

Expand Down Expand Up @@ -181,7 +182,7 @@ export function resetPasswordInitiate(req, res) {
],
(err) => {
if (err) {
console.log(err);
logger.error(err);
res.json({ success: false });
return;
}
Expand Down
14 changes: 14 additions & 0 deletions server/logger/dev-logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import winston from 'winston';
const { combine, timestamp, printf, colorize, align } = winston.format;

export const developmentLogger = () => {
const logger = winston.createLogger({
level: 'debug',
format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
align(),
colorize({ all: true }),
printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)),
transports: [new winston.transports.Console()],
});
return logger;
}
29 changes: 29 additions & 0 deletions server/logger/prod-logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import winston from 'winston';
const { combine, timestamp, json } = winston.format;

const errorFilter = winston.format((info, opts) => {
return info.level === 'error' ? info : false;
});

const infoFilter = winston.format((info, opts) => {
return info.level === 'info' ? info : false;
});

export const productionLogger = () => {
const logger = winston.createLogger({
level: 'info',
format: combine(timestamp(), json()),
transports: [
new winston.transports.File({
filename: 'app-error.log',
level: 'error',
format: combine(errorFilter(), timestamp(), json()),
}),
new winston.transports.File({
filename: 'app-info.log',
level: 'info',
format: combine(infoFilter(), timestamp(), json()),
})]
});
return logger;
}
11 changes: 11 additions & 0 deletions server/logger/winston.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { developmentLogger } from './dev-logger.js';
import { productionLogger } from './prod-logger.js';

export let logger = null;

if (process.env.NODE_ENV !== "production") {
logger = developmentLogger();
}
else {
logger = productionLogger();
}
21 changes: 11 additions & 10 deletions server/migrations/db_reformat.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@
import mongoose from 'mongoose';
import path from 'path';
import { uniqWith, isEqual } from 'lodash';
require('dotenv').config({path: path.resolve('.env')});
require('dotenv').config({ path: path.resolve('.env') });
const ObjectId = mongoose.Types.ObjectId;
mongoose.connect('mongodb://localhost:27017/p5js-web-editor');
mongoose.connection.on('error', () => {
console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
logger.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
process.exit(1);
});

import Project from '../models/project';
import User from '../models/user';

import s3 from '@auth0/s3';
import { logger } from '../logger/winston.js';

let client = s3.createClient({
maxAsyncS3: 20,
Expand All @@ -39,15 +40,15 @@ Project.find({})
}
});
});
console.log(s3Files.length);
logger.debug(s3Files.length);
s3Files = uniqWith(s3Files, isEqual);
console.log(s3Files.length);
logger.debug(s3Files.length);
});

const uploadedFiles = [];
const params = {'s3Params': {'Bucket': `${process.env.S3_BUCKET}`}};
const params = { 's3Params': { 'Bucket': `${process.env.S3_BUCKET}` } };
let objectsResponse = client.listObjects(params);
objectsResponse.on('data', function(objects) {
objectsResponse.on('data', function (objects) {
objects.Contents.forEach(object => {
uploadedFiles.push(object.Key);
});
Expand All @@ -59,7 +60,7 @@ objectsResponse.on('end', () => {
uploadedFiles.forEach(fileKey => {
if (s3Files.indexOf(fileKey) === -1) {
//delete file
filesToDelete.push({Key: fileKey});
filesToDelete.push({ Key: fileKey });
// console.log("would delete file: ", fileKey);
}
});
Expand All @@ -76,9 +77,9 @@ objectsResponse.on('end', () => {
// del.on('end', () => {
// console.log('deleted extra S3 files!');
// });
console.log("To delete: ", filesToDelete.length);
console.log("Total S3 files: ", uploadedFiles.length);
console.log("Total S3 files in mongo: ", s3Files.length);
logger.debug("To delete: ", filesToDelete.length);
logger.debug("Total S3 files: ", uploadedFiles.length);
logger.debug("Total S3 files in mongo: ", s3Files.length);
});

// let projectsNotToUpdate;
Expand Down
Loading