diff --git a/config.js b/config.js
index 4841763cc8ae09ee51d6c44e38db17224d2d2430..71a2b5d7bdbc2b0c25e2d55a085f0873e4bdaf0d 100644
--- a/config.js
+++ b/config.js
@@ -26,7 +26,7 @@ module.exports = {
     databaseURL: 'mongodb://localhost:27017/',
     port: 4000,
     secret: 'longsecretislong',
-    logLevel: 'info',
+    logLevel: 'verbose',
     logFile: 'log.txt',
     admin: {
       username: 'admin',
diff --git a/routes/files.js b/routes/files.js
index 55199d221d1d51e6824241e81ce2c51678ce1186..bff503d23ba513675c02f5ee7c7e0ac1d8d2bb99 100644
--- a/routes/files.js
+++ b/routes/files.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var File = require('../models/file');
@@ -36,29 +37,27 @@ var router = express.Router();
 
 // routes
 router.get('/files', auth.validateToken, function(req, res) {
-  
   // find request author
   User.findOne({ _id: req.decoded._doc._id }, function(err, user) {
     if (err) {
-      console.error('Could find user requesting files', err);
+      logger.error('Could find user requesting files', err);
     }
-    
+
     File.find({ _id: { $in : user.files } }, function(err, files) {
       if (err) {
-        console.error('Error while querying files from user', error, user);
+        logger.error('Error while querying files from user', { err, user });
         return res.status(500).send({ success: false, message: 'Could not retrieve user\'s files.' });
       }
 
       res.send({ files: files });
     });
-
   });
-
 });
 
 router.get('/files/:id', function(req, res) {
   File.findOne({ _id: req.params.id }, function(err, file) {
     if (err) {
+      logger.log('verbose', 'GET Unknown file for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -69,11 +68,13 @@ router.get('/files/:id', function(req, res) {
 router.delete('/files/:id', function(req, res) {
   File.findOne({ _id: req.params.id }, function(err, file) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown file for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
     file.remove(function(err) {
       if (err) {
+        logger.error('Unable to remove file', file);
         return res.status(500).send(err);
       }
 
diff --git a/routes/projects.js b/routes/projects.js
index a9145905d3bb8cff11dadb1b85b0dbe9c9aee5e5..a278acc61ef50b3c115eba5290b64a5185191210 100644
--- a/routes/projects.js
+++ b/routes/projects.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var Project = require('../models/project');
@@ -40,6 +41,7 @@ router.get('/projects', /*auth.validateRole('project', 'read'),*/ function(req,
   // get all projects
   Project.find(function(err, projects) {
     if (err) {
+      logger.error('Unable to receive projects', err);
       return res.status(400).send(err);
     }
 
@@ -54,6 +56,7 @@ router.post('/projects', /*auth.validateRole('project', 'create'),*/ function(re
   // save project
   project.save(function(err) {
     if (err) {
+      logger.error('Unable to create project', err);
       return res.status(500).send(err);
     }
 
@@ -73,6 +76,7 @@ router.post('/projects', /*auth.validateRole('project', 'create'),*/ function(re
         // add project to simulation
         Simulation.findOne({ _id: project.simulation }, function(err, simulation) {
           if (err) {
+            logger.log('verbose', 'Unknown simulation for id: ' + project.simulation, { err, project });
             return res.status(400).send(err);
           }
 
@@ -80,6 +84,7 @@ router.post('/projects', /*auth.validateRole('project', 'create'),*/ function(re
 
           simulation.save(function(err) {
             if (err) {
+              logger.error('Unable to save simulation', { err, simulation });
               return res.status(500).send(err);
             }
 
@@ -95,6 +100,7 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
   // get project
   Project.findOne({ _id: req.params.id }, function(err, project) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown project for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -140,7 +146,8 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
       // remove from old simulation
       Simulation.findOne({ _id: project.simulation }, function(err, simulation) {
         if (err) {
-          return console.log(err);
+          logger.verbose('Unable to find simulation for id: ' + project.simulation);
+          return;
         }
 
         for (var i = 0; i < simulation.projects; i++) {
@@ -151,7 +158,8 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
 
         simulation.save(function(err) {
           if (err) {
-            return console.log(err);
+            logger.error('Unable to save simulation', simulation);
+            return;
           }
         });
       });
@@ -159,14 +167,16 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
       // add to new simulation
       Simulation.findOne({ _id: req.body.project.simulation }, function(err, simulation) {
         if (err) {
-          return console.log(err);
+          logger.error('Unable to find simulation for id: ' + req.body.project.simulation);
+          return;
         }
 
         simulation.projects.push(project._id);
 
         simulation.save(function(err) {
           if (err) {
-            return console.log(err);
+            logger.error('Unable to save simulation', simulation);
+            return;
           }
         });
       });
@@ -180,6 +190,7 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
     // save the changes
     project.save(function(err) {
       if (err) {
+        logger.error('Unable to save project', project);
         return res.status(500).send(err);
       }
 
@@ -191,6 +202,7 @@ router.put('/projects/:id', /*auth.validateRole('project', 'update'),*/ function
 router.get('/projects/:id', /*auth.validateRole('project', 'read'),*/ function(req, res) {
   Project.findOne({ _id: req.params.id }, function(err, project) {
     if (err) {
+      logger.log('verbose', 'GET Unknown project for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -201,6 +213,7 @@ router.get('/projects/:id', /*auth.validateRole('project', 'read'),*/ function(r
 router.delete('/projects/:id', /*auth.validateRole('project', 'delete'),*/ function(req, res) {
   Project.findOne({ _id: req.params.id }, function(err, project) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown project for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -225,6 +238,7 @@ router.delete('/projects/:id', /*auth.validateRole('project', 'delete'),*/ funct
         // remove the project
         project.remove(function(err) {
           if (err) {
+            logger.error('Unable to remove project', project);
             return res.status(500).send(err);
           }
 
diff --git a/routes/simulationModels.js b/routes/simulationModels.js
index bd9d078081e382f05b7e184e9db71b81ac59c2f1..f6eb4ff69504e1464abe52a9b44f4052393a5123 100644
--- a/routes/simulationModels.js
+++ b/routes/simulationModels.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var SimulationModel = require('../models/simulationModel');
@@ -39,6 +40,7 @@ router.get('/simulationModels', /*auth.validateRole('simulationModel', 'read'),*
   // get all user simulations
   SimulationModel.find(function(err, models) {
     if (err) {
+      logger.error('Unable to receive simulation models', err);
       return res.status(400).send(err);
     }
 
@@ -52,12 +54,14 @@ router.post('/simulationModels', /*auth.validateRole('simulationModel', 'create'
 
   model.save(function(err) {
     if (err) {
+      logger.error('Unable to create simulation model', err);
       return res.status(400).send(err);
     }
 
     // add model to simulation
     Simulation.findOne({ _id: model.simulation }, function(err, simulation) {
       if (err) {
+        logger.verbose('Unable to find simulation for id: ' + model.simulation);
         return res.status(500).send(err);
       }
 
@@ -65,6 +69,7 @@ router.post('/simulationModels', /*auth.validateRole('simulationModel', 'create'
 
       simulation.save(function(err) {
         if (err) {
+          logger.error('Unable to save simulation', simulation);
           return res.status(500).send(err);
         }
 
@@ -78,6 +83,7 @@ router.put('/simulationModels/:id', /*auth.validateRole('simulationModel', 'upda
   // get model
   SimulationModel.findOne({ _id: req.params.id }, function(err, model) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown simulation model for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -89,6 +95,7 @@ router.put('/simulationModels/:id', /*auth.validateRole('simulationModel', 'upda
     // save the changes
     model.save(function(err) {
       if (err) {
+        logger.error('Unable to save simulation model', model);
         return res.status(500).send(err);
       }
 
@@ -100,6 +107,7 @@ router.put('/simulationModels/:id', /*auth.validateRole('simulationModel', 'upda
 router.get('/simulationModels/:id', /*auth.validateRole('simulationModel', 'read'),*/ function(req, res) {
   SimulationModel.findOne({ _id: req.params.id }, function(err, model) {
     if (err) {
+      logger.log('verbose', 'GET Unknown project for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -110,12 +118,14 @@ router.get('/simulationModels/:id', /*auth.validateRole('simulationModel', 'read
 router.delete('/simulationModels/:id', /*auth.validateRole('simulationModel', 'delete'),*/ function(req, res) {
   SimulationModel.findOne({ _id: req.params.id }, function(err, model) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown simulation model for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
     // remove from simulation's list
     Simulation.findOne({ _id: model.simulation }, function(err, simulation) {
       if (err) {
+        logger.log('verbose', 'Unable to find simulation for id: ' + model.simulation);
         return res.status(500).send(err);
       }
 
@@ -128,11 +138,13 @@ router.delete('/simulationModels/:id', /*auth.validateRole('simulationModel', 'd
 
       simulation.save(function(err) {
         if (err) {
+          logger.error('Unable to save simulation', simulation);
           return res.status(500).send(err);
         }
 
         model.remove(function(err) {
           if (err) {
+            logger.error('Unable to remove simulation model', model);
             return res.status(500).send(err);
           }
 
diff --git a/routes/simulations.js b/routes/simulations.js
index 4afe88b36f9aeae824aee802ca554bba73d759bd..74a45c33d6812553386b1d7bdc77efe3f0fa540d 100644
--- a/routes/simulations.js
+++ b/routes/simulations.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var Simulation = require('../models/simulation');
@@ -38,6 +39,7 @@ var router = express.Router();
 router.get('/simulations', /*auth.validateRole('simulation', 'read'),*/ function(req, res) {
   Simulation.find(function(err, simulations) {
     if (err) {
+      logger.error('Unable to receive simulations', err);
       return res.send(err);
     }
 
@@ -51,6 +53,7 @@ router.post('/simulations', /*auth.validateRole('simulation', 'create'), auth.va
 
   simulation.save(function(err) {
     if (err) {
+      logger.error('Unable to create simulation', err);
       return res.status(400).send(err);
     }
 
@@ -78,6 +81,7 @@ router.put('/simulations/:id', /*auth.validateRole('simulation', 'update'),*/ fu
   // get simulation
   Simulation.findOne({ _id: req.params.id }, function(err, simulation) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown simulation for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -131,6 +135,7 @@ router.put('/simulations/:id', /*auth.validateRole('simulation', 'update'),*/ fu
     // save the changes
     simulation.save(function(err) {
       if (err) {
+        logger.error('Unable to save simulation', simulation);
         return res.status(400).send(err);
       }
 
@@ -142,6 +147,7 @@ router.put('/simulations/:id', /*auth.validateRole('simulation', 'update'),*/ fu
 router.get('/simulations/:id', /*auth.validateRole('simulation', 'read'),*/ function(req, res) {
   Simulation.findOne({ _id: req.params.id }, function(err, simulation) {
     if (err) {
+      logger.log('verbose', 'GET Unknown simulation for id: ' + req.params.id);
       return res.send(err);
     }
 
@@ -157,6 +163,7 @@ router.get('/simulations/:id', /*auth.validateRole('simulation', 'read'),*/ func
 router.delete('/simulations/:id', /*auth.validateRole('simulation', 'delete'),*/ function(req, res) {
   Simulation.findOne({ _id: req.params.id }, function(err, simulation) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown simulation for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -186,6 +193,7 @@ router.delete('/simulations/:id', /*auth.validateRole('simulation', 'delete'),*/
         // remove simulation itself
         simulation.remove(function(err) {
           if (err) {
+            logger.error('Unable to remove simulation', simulation);
             return res.status(500).send(err);
           }
 
diff --git a/routes/simulators.js b/routes/simulators.js
index 9db2b2fec34af3436178a4399c4e81afa03f8246..bee398457f37664837af08d89a1ee93d5ddd1d89 100644
--- a/routes/simulators.js
+++ b/routes/simulators.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var Simulator = require('../models/simulator');
@@ -38,6 +39,7 @@ router.get('/simulators', /*auth.validateRole('simulator', 'read'),*/ function(r
   // get all simulators
   Simulator.find(function(err, simulators) {
     if (err) {
+      logger.error('Unable to receive simulators', err);
       return res.status(400).send(err);
     }
 
@@ -51,6 +53,7 @@ router.post('/simulators', /*auth.validateRole('simulator', 'create'),*/ functio
 
   simulator.save(function(err) {
     if (err) {
+      logger.error('Unable to create simulator', err);
       return res.status(400).send(err);
     }
 
@@ -62,6 +65,7 @@ router.put('/simulators/:id', /*auth.validateRole('simulator', 'update'),*/ func
   // get simulator
   Simulator.findOne({ _id: req.params.id }, function(err, simulator) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown simulator for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -73,6 +77,7 @@ router.put('/simulators/:id', /*auth.validateRole('simulator', 'update'),*/ func
     // save the changes
     simulator.save(function(err) {
       if (err) {
+        logger.error('Unable to save simulator', simulator);
         return res.status(500).send(err);
       }
 
@@ -84,6 +89,7 @@ router.put('/simulators/:id', /*auth.validateRole('simulator', 'update'),*/ func
 router.get('/simulators/:id', /*auth.validateRole('simulator', 'read'),*/ function(req, res) {
   Simulator.findOne({ _id: req.params.id }, function(err, simulator) {
     if (err) {
+      logger.log('verbose', 'GET Unknown simulator for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
@@ -94,11 +100,13 @@ router.get('/simulators/:id', /*auth.validateRole('simulator', 'read'),*/ functi
 router.delete('/simulators/:id', /*auth.validateRole('simulator', 'delete'),*/ function(req, res) {
   Simulator.findOne({ _id: req.params.id }, function(err, simulator) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown simulator for id: ' + req.params.id);
       return res.status(400).send(err);
     }
 
     simulator.remove(function(err) {
       if (err) {
+        logger.error('Unable to remove simulator', simulator);
         return res.status(500).send(err);
       }
 
diff --git a/routes/upload.js b/routes/upload.js
index 04430d7aa4d78bf80e9e871ac519218987a4e686..8f1ad917569b7bddb6c36667139277680937a364 100644
--- a/routes/upload.js
+++ b/routes/upload.js
@@ -28,6 +28,7 @@ var fs = require('fs');
 // load configuration
 var config = require('../config');
 var auth = require('../auth');
+var logger = require('../utils/logger');
 
 var User = require('../models/user');
 var File = require('../models/file');
@@ -44,11 +45,11 @@ router.use(express.static(publicDir));
 
 // routes
 router.post('/upload', auth.validateRole('visualization', 'update'), function(req, res) {
-  
+
   // find upload author
   User.findOne({ _id: req.decoded._doc._id }, function(err, user) {
     if (err) {
-      console.error('Could find author while uploading', err);
+      logger.log('verbose', 'GET Unable to find user for id: ' + req.decoded._doc._id);
       res.status(500).send({ success: false, message: 'File could not be uploaded.' });
     }
 
@@ -58,7 +59,7 @@ router.post('/upload', auth.validateRole('visualization', 'update'), function(re
     form.uploadDir = userFolder;
 
     form.on('error', function(error) {
-      console.error('Error while processing incoming form',error);
+      logger.error('Unable to process incoming form', error);
       res.status(400).send({ success: false, message: 'File could not be uploaded.' });
     });
 
@@ -69,7 +70,7 @@ router.post('/upload', auth.validateRole('visualization', 'update'), function(re
       var fileObj = new File({ name: file.name, path: filePath });
       fileObj.save(function(err) {
         if (err) {
-          console.error('Error while storing reference to uploaded file', err);
+          logger.error('Unable to save reference file', err);
           res.status(500).send({ success: false, message: 'File could not be uploaded.' });
         }
 
@@ -77,7 +78,7 @@ router.post('/upload', auth.validateRole('visualization', 'update'), function(re
 
         user.save(function(err) {
           if (err) {
-            console.error('Error while updating user\'s files references', err);
+            logger.error('Unable to save user', user);
             res.status(500).send({ success: false, message: 'File could not be uploaded.' });
           }
         });
@@ -90,12 +91,13 @@ router.post('/upload', auth.validateRole('visualization', 'update'), function(re
 
     // Make sure user's folder exists
     fs.mkdir(userFolder, function(err) {
-      // error occurred (ignore already existing) 
+      // error occurred (ignore already existing)
       if (err && err.code != 'EEXIST') {
+        logger.error('Unable to create directory', err);
         res.status(500).send({ success: false, message: 'File could not be uploaded.'});
         return;
       }
-      
+
       // handle the request
       form.parse(req);
 
diff --git a/routes/users.js b/routes/users.js
index e6a85d4f5dd5af7000180408c827494fc4c24495..8193999e8abb67f93620b2cca20c57f31bfa88b9 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -25,6 +25,7 @@ var jwt = require('jsonwebtoken');
 
 var auth = require('../auth');
 var config = require('../config')[process.env.NODE_ENV || 'development'];
+var logger = require('../utils/logger');
 
 // models
 var User = require('../models/user');
@@ -40,6 +41,7 @@ router.get('/users', auth.validateRole('user', 'read'), function(req, res) {
   // get all users
   User.find({}, 'username role mail', function(err, users) {
     if (err) {
+      logger.error('Unable to receive users', err);
       return next(err);
     }
 
@@ -49,15 +51,17 @@ router.get('/users', auth.validateRole('user', 'read'), function(req, res) {
 
 router.post('/users', auth.validateRole('user', 'create'), function(req, res) {
   // create new user, only if username hasn't been taken
-  
+
   User.findOne({ username: req.body.user.username }, function(err, foundUser) {
     if (err) {
+      logger.error('Unable to create user', err);
       return res.send(err);
     }
 
     // If query was successful, the username has already been taken
     if (foundUser) {
       // Send a Bad Request response code
+      logger.log('verbose', 'Unable to create user with existing username: ' + req.body.user.username);
       return res.status(400).send({ success: false, message: 'Username is already taken' });
     }
 
@@ -65,6 +69,7 @@ router.post('/users', auth.validateRole('user', 'create'), function(req, res) {
 
     user.save(function(err) {
       if (err) {
+        logger.error('Unable to create user', { err, user });
         return res.send(err);
       }
 
@@ -78,10 +83,12 @@ router.put('/users/:id', auth.validateRole('user', 'update'), function(req, res)
   // get user
   User.findOne({ _id: req.params.id }, function(err, user) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown user for id: ' + req.params.id);
       return res.send(err);
     }
 
     if (user == null) {
+      logger.log('verbose', 'Unable to find user for id: ' + req.params.id);
       return res.status(404).send({});
     }
 
@@ -101,6 +108,7 @@ router.put('/users/:id', auth.validateRole('user', 'update'), function(req, res)
         user[property] = req.body.user[property];
       }
     } else {
+      logger.log('verbose', 'Missing authorization for user change (id): ' + req.decoded._doc._id, user);
       return res.status(403).send({ success: false, message: 'Invalid authorization' });
     }
 
@@ -109,6 +117,7 @@ router.put('/users/:id', auth.validateRole('user', 'update'), function(req, res)
       if (err) {
         // catch 'duplicate' errors, send a Bad Request response code
         // Message is only valid as long as Username is the only unique field
+        logger.error('Unable to save user', user);
         return err.code === 11000? res.status(400).send({ success: false, message: 'Username is already taken' }) : res.send(err)
       }
 
@@ -124,6 +133,7 @@ router.get('/users/me', function(req, res) {
 
   User.findOne({ _id: userId }, function(err, user) {
     if (err) {
+      logger.log('verbose', 'GET Unknown user for id: ' + req.decoded._doc._id);
       return res.send(err);
     }
 
@@ -134,6 +144,7 @@ router.get('/users/me', function(req, res) {
 router.get('/users/:id', auth.validateRole('user', 'read'), function(req, res) {
   User.findOne({ _id: req.params.id }, function(err, user) {
     if (err) {
+      logger.log('verbose', 'GET Unknown user for id: ' + req.decoded._doc._id);
       return res.send(err);
     }
 
@@ -144,11 +155,13 @@ router.get('/users/:id', auth.validateRole('user', 'read'), function(req, res) {
 router.delete('/users/:id', auth.validateRole('user', 'delete'), function(req, res) {
   User.findOne({ _id: req.params.id }, function(err, user) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown user for id: ' + req.params.id);
       return res.send(err);
     }
 
     user.remove(function(err) {
       if (err) {
+        logger.error('Unable to remove user', user);
         return res.send(err);
       }
 
@@ -160,22 +173,26 @@ router.delete('/users/:id', auth.validateRole('user', 'delete'), function(req, r
 router.route('/authenticate').post(function(req, res) {
   // get the user by the name
   if (!req.body.username || !req.body.password) {
+    logger.log('verbose', 'Missing credentials', req.body);
     return res.status(401).send({ success: false, message: 'Invalid credentials' });
   }
 
   User.findOne({ username: req.body.username }, function(err, user) {
     // handle errors and missing user
     if (err) {
+      logger.log('verbose', 'Unknown user for username: ' + req.body.username);
       return res.send(err);
     }
 
     if (!user) {
+      logger.log('verbose', 'Unknown user for username: ' + req.body.username);
       return res.status(401).send({ success: false, message: 'Invalid credentials' });
     }
 
     // validate password
     user.verifyPassword(req.body.password, function(err, isMatch) {
       if (err || !isMatch) {
+        logger.log('verbose', 'Invalid credentials', req.body);
         return res.status(401).send({ success: false, message: 'Invalid credentials' });
       }
 
diff --git a/routes/visualizations.js b/routes/visualizations.js
index 8d07c70ad649f13c561c75df1b3451bbd33dd393..759f4a43cb222c124481e8dcd4e34d9bd9976da3 100644
--- a/routes/visualizations.js
+++ b/routes/visualizations.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var Visualization = require('../models/visualization');
@@ -39,6 +40,7 @@ router.get('/visualizations', /*auth.validateRole('visualization', 'read'),*/ fu
   // get all visualizations
   Visualization.find(function(err, visualizations) {
     if (err) {
+      logger.error('Unable to receive visualizations', err);
       return res.send(err);
     }
 
@@ -52,6 +54,7 @@ router.post('/visualizations', /*auth.validateRole('visualization', 'create'),*/
 
   visualization.save(function(err) {
     if (err) {
+      logger.error('Unable to create visualization', err);
       return res.send(err);
     }
 
@@ -61,14 +64,16 @@ router.post('/visualizations', /*auth.validateRole('visualization', 'create'),*/
   // add visualization to project
   Project.findOne({ _id: visualization.project }, function(err, project) {
     if (err) {
-      return console.log(err);
+      logger.log('verbose', 'Unknown project for id: ' + visualization.project, visualization);
+      return;
     }
 
     project.visualizations.push(visualization._id);
 
     project.save(function(err) {
       if (err) {
-        return console.log(err);
+        logger.error('Unable to save project', project);
+        return;
       }
     });
   });
@@ -78,6 +83,7 @@ router.put('/visualizations/:id', /*auth.validateRole('visualization', 'update')
   // get visualization
   Visualization.findOne({ _id: req.params.id }, function(err, visualization) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown visualization for id: ' + req.params.id);
       return res.send(err);
     }
 
@@ -89,6 +95,7 @@ router.put('/visualizations/:id', /*auth.validateRole('visualization', 'update')
     // save the changes
     visualization.save(function(err) {
       if (err) {
+        logger.error('Unable to save visualization', visualization);
         return res.send(err);
       }
 
@@ -100,6 +107,7 @@ router.put('/visualizations/:id', /*auth.validateRole('visualization', 'update')
 router.get('/visualizations/:id', /*auth.validateRole('visualization', 'read'),*/ function(req, res) {
   Visualization.findOne({ _id: req.params.id }, function(err, visualization) {
     if (err) {
+      logger.log('verbose', 'GET Unknown visualization for id: ' + req.params.id);
       return res.send(err);
     }
 
@@ -110,13 +118,15 @@ router.get('/visualizations/:id', /*auth.validateRole('visualization', 'read'),*
 router.delete('/visualizations/:id', /*auth.validateRole('visualization', 'delete'),*/ function(req, res) {
   Visualization.findOne({ _id: req.params.id }, function(err, visualization) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown visualization for id: ' + req.params.id);
       return res.send(err);
     }
 
     // remove from project's list
     Project.findOne({ _id: visualization.project }, function(err, project) {
       if (err) {
-        return console.log(err);
+        logger.log('verbose', 'Unknown project for id: ' + visualization.project);
+        return;
       }
 
       for (var i = 0; i < project.visualizations.length; i++) {
@@ -128,13 +138,15 @@ router.delete('/visualizations/:id', /*auth.validateRole('visualization', 'delet
 
       project.save(function(err) {
         if (err) {
-          return console.log(err);
+          logger.error('Unable to save project', project);
+          return;
         }
       });
     });
 
     visualization.remove(function(err) {
       if (err) {
+        logger.error('Unable to remove visualization', visualization);
         return res.send(err);
       }
 
diff --git a/routes/widgets.js b/routes/widgets.js
index eb5bf35252385cc259ffbff7c649f4888765f0ac..23061e84cc24a9b77660e30f2b686bfe01d8bba4 100644
--- a/routes/widgets.js
+++ b/routes/widgets.js
@@ -23,6 +23,7 @@
 var express = require('express');
 
 //var auth = require('../auth');
+var logger = require('../utils/logger');
 
 // models
 var Widget = require('../models/widget');
@@ -39,6 +40,7 @@ router.get('/widgets', /*auth.validateRole('visualization', 'read'),*/ function(
   // get all widgets
   Widget.find(function(err, widgets) {
     if (err) {
+      logger.error('Unable to receive widgets', err);
       return res.send(err);
     }
 
@@ -52,6 +54,7 @@ router.post('/widgets', /*auth.validateRole('visualization', 'create'),*/ functi
 
   widget.save(function(err) {
     if (err) {
+      logger.error('Unable to create widget', err);
       return res.send(err);
     }
 
@@ -61,14 +64,16 @@ router.post('/widgets', /*auth.validateRole('visualization', 'create'),*/ functi
   // add widget to visualization
   Visualization.findOne({ _id: widget.visualization }, function(err, visualization) {
     if (err) {
-      return console.log(err);
+      logger.log('verbose', 'Unknown visualization for id: ' + widget.visualization);
+      return;
     }
 
     visualization.widgets.push(widget._id);
 
     visualization.save(function(err) {
       if (err) {
-        return console.log(err);
+        logger.error('Unable to save visualization', visualization);
+        return;
       }
     });
   });
@@ -78,6 +83,7 @@ router.put('/widgets/:id', /*auth.validateRole('visualization', 'update'),*/ fun
   // get widget
   Widget.findOne({ _id: req.params.id }, function(err, widget) {
     if (err) {
+      logger.log('verbose', 'PUT Unknown widget for id: ' + req.params.id);
       return res.send(err);
     }
 
@@ -89,6 +95,7 @@ router.put('/widgets/:id', /*auth.validateRole('visualization', 'update'),*/ fun
     // save the changes
     widget.save(function(err) {
       if (err) {
+        logger.error('Unable to save widget', widget);
         return res.send(err);
       }
 
@@ -100,6 +107,7 @@ router.put('/widgets/:id', /*auth.validateRole('visualization', 'update'),*/ fun
 router.get('/widgets/:id', /*auth.validateRole('visualization', 'read'),*/ function(req, res) {
   Widget.findOne({ _id: req.params.id }, function(err, widget) {
     if (err) {
+      logger.log('verbose', 'GET Unknown widget for id: ' + req.params.id);
       return res.send(err);
     }
 
@@ -110,13 +118,15 @@ router.get('/widgets/:id', /*auth.validateRole('visualization', 'read'),*/ funct
 router.delete('/widgets/:id', /*auth.validateRole('visualization', 'delete'),*/ function(req, res) {
   Widget.findOne({ _id: req.params.id }, function(err, widget) {
     if (err) {
+      logger.log('verbose', 'DELETE Unknown widget for id: ' + req.params.id);
       return res.send(err);
     }
 
     // remove from visualization's list
     Visualization.findOne({ _id: widget.visualization }, function(err, visualization) {
       if (err) {
-        return console.log(err);
+        logger.log('verbose', 'Unknown visualization for id: ' + widget.visualization);
+        return;
       }
 
       for (var i = 0; i < visualization.widgets.length; i++) {
@@ -128,13 +138,15 @@ router.delete('/widgets/:id', /*auth.validateRole('visualization', 'delete'),*/
 
       visualization.save(function(err) {
         if (err) {
-          return console.log(err);
+          logger.error('Unable to save visualization', visualization);
+          return;
         }
       });
     });
 
     widget.remove(function(err) {
       if (err) {
+        logger.error('Unable to remove widget', widget);
         return res.send(err);
       }