diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java
index 7aceb7ed511311627a294faa0e4b2977743a9572..1b1b9fc648c1dd102927b80fc9779a733c2fb3e4 100644
--- a/src/main/java/org/hbp/mip/MIPApplication.java
+++ b/src/main/java/org/hbp/mip/MIPApplication.java
@@ -24,6 +24,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiParam;
+import org.apache.log4j.Logger;
 import org.hbp.mip.model.User;
 import org.hbp.mip.utils.CORSFilter;
 import org.hbp.mip.utils.HibernateUtil;
@@ -92,6 +93,8 @@ import java.security.Principal;
 @Api(value = "/", description = "MIP API")
 public class MIPApplication extends WebSecurityConfigurerAdapter {
 
+    private Logger logger = Logger.getLogger(this.getClass());
+
     @Autowired
     OAuth2ClientContext oauth2ClientContext;
 
@@ -181,9 +184,9 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
             cookie.setPath("/");
             response.addCookie(cookie);
         } catch (JsonProcessingException e) {
-            e.printStackTrace();
+            logger.trace(e);
         } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
+            logger.trace(e);
         }
         return principal;
     }
diff --git a/src/main/java/org/hbp/mip/controllers/AppsApi.java b/src/main/java/org/hbp/mip/controllers/AppsApi.java
index aa0bd2357c08c99f8e121ccc85ecb71af9ef6f7c..705fc0736e7d4ecdf2d6c73218d21d310508c558 100644
--- a/src/main/java/org/hbp/mip/controllers/AppsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/AppsApi.java
@@ -5,6 +5,7 @@
 package org.hbp.mip.controllers;
 
 import io.swagger.annotations.*;
+import org.apache.log4j.Logger;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.App;
 import org.hbp.mip.model.User;
@@ -32,6 +33,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/apps", description = "the apps API")
 public class AppsApi {
 
+    private Logger logger = Logger.getLogger(this.getClass());
+
     @Autowired
     MIPApplication mipApplication;
 
@@ -106,6 +109,7 @@ public class AppsApi {
         }
         catch (ConstraintViolationException cve)
         {
+            logger.trace(cve);
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
@@ -114,6 +118,7 @@ public class AppsApi {
         }
         catch (NonUniqueObjectException nuoe)
         {
+            logger.trace(nuoe);
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
diff --git a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
index c3de97577e77150b61e97828f2598652930dce5e..3fb3febd15833459e7fb9b54055aed423cf8f88b 100644
--- a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
@@ -7,6 +7,7 @@ package org.hbp.mip.controllers;
 
 import com.github.slugify.Slugify;
 import io.swagger.annotations.*;
+import org.apache.log4j.Logger;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.Article;
 import org.hbp.mip.model.User;
@@ -31,6 +32,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/articles", description = "the articles API")
 public class ArticlesApi {
 
+    private Logger logger = Logger.getLogger(this.getClass());
+
     @Autowired
     MIPApplication mipApplication;
 
@@ -132,7 +135,7 @@ public class ArticlesApi {
             try {
                 slg = new Slugify();
             } catch (IOException e) {
-                e.printStackTrace();
+                logger.trace(e);
             }
             String slug = slg != null ? slg.slugify(article.getTitle()) : "";
 
diff --git a/src/main/java/org/hbp/mip/controllers/ExperimentApi.java b/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
index 8cb6c074b1edf47bd83dc62de6817f602b899e94..cadf43ea34a878031348bf7b916c512887df902a 100644
--- a/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
@@ -2,6 +2,7 @@ package org.hbp.mip.controllers;
 
 import com.google.gson.*;
 import io.swagger.annotations.*;
+import org.apache.log4j.Logger;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.*;
 import org.hbp.mip.utils.HTTPUtil;
@@ -34,6 +35,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-07T07:38:20.227Z")
 public class ExperimentApi {
 
+    private Logger logger = Logger.getLogger(this.getClass());
+
     private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json";
 
     private static final Gson gson = new GsonBuilder()
@@ -69,7 +72,7 @@ public class ExperimentApi {
                     // create query
                     try {
                         con.setRequestMethod("POST");
-                    } catch (ProtocolException pe) {} // ignore; won't happen
+                    } catch (ProtocolException pe) { logger.trace(pe); } // ignore; won't happen
                     con.addRequestProperty("Content-Type", "application/json");
                     con.setRequestProperty("Content-Length", Integer.toString(query.length()));
                     con.setFollowRedirects(true);
@@ -99,6 +102,8 @@ public class ExperimentApi {
 
                 } catch (IOException ioe) {
                     // write error to
+                    logger.trace(ioe);
+                    logger.warn("Experiment failed to run properly !");
                     experiment.setHasError(true);
                     experiment.setHasServerError(true);
                     experiment.setResult(ioe.getMessage());
@@ -153,7 +158,8 @@ public class ExperimentApi {
             {
                 transaction.rollback();
             }
-            e.printStackTrace();
+            logger.trace(e);
+            logger.warn("Cannot create experiment to run ! This is probably caused by a bad request !");
             // 400 here probably
             return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
         }
@@ -167,7 +173,7 @@ public class ExperimentApi {
             {
                 sendPost(experiment);
             }
-        } catch (MalformedURLException mue) {} // ignore
+        } catch (MalformedURLException mue) { logger.trace(mue.getMessage()); } // ignore
 
         return new ResponseEntity<>(gson.toJson(experiment), HttpStatus.OK);
     }
@@ -233,6 +239,8 @@ public class ExperimentApi {
                         experiment.setResult("Unsupported variables !");
                     }
                 } catch (Exception e) {
+                    logger.trace(e);
+                    logger.warn("Failed to run Exareme algorithm !");
                     experiment.setHasError(true);
                     experiment.setHasServerError(true);
                     experiment.setResult(e.getMessage());
@@ -259,6 +267,7 @@ public class ExperimentApi {
             new JsonParser().parse(test);
         } catch (JsonParseException jpe)
         {
+            logger.trace(jpe); // This is the normal behavior when the input string is not JSON-ified
             return false;
         }
         return true;
@@ -280,6 +289,8 @@ public class ExperimentApi {
         try {
             experimentUuid = UUID.fromString(uuid);
         } catch (IllegalArgumentException iae) {
+            logger.trace(iae);
+            logger.warn("An invalid Experiment UUID was received !");
             return ResponseEntity.badRequest().body("Invalid Experiment UUID");
         }
 
@@ -318,6 +329,8 @@ public class ExperimentApi {
         try {
             experimentUuid = UUID.fromString(uuid);
         } catch (IllegalArgumentException iae) {
+            logger.trace(iae);
+            logger.warn("An invalid Experiment UUID was received !");
             return ResponseEntity.badRequest().body("Invalid Experiment UUID");
         }
 
@@ -357,6 +370,8 @@ public class ExperimentApi {
         try {
             experimentUuid = UUID.fromString(uuid);
         } catch (IllegalArgumentException iae) {
+            logger.trace(iae);
+            logger.warn("An invalid Experiment UUID was received !");
             return ResponseEntity.badRequest().body("Invalid Experiment UUID");
         }
 
diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
index 42c130cdce9ced7f6a15b18972246121d90fdd38..4679b0857750323e85bc34aecac6c1b8221db550 100644
--- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
@@ -6,6 +6,7 @@ package org.hbp.mip.controllers;
 
 import com.github.slugify.Slugify;
 import io.swagger.annotations.*;
+import org.apache.log4j.Logger;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.*;
 import org.hbp.mip.utils.CSVUtil;
@@ -28,6 +29,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-07T07:38:20.227Z")
 public class ModelsApi {
 
+    private Logger logger = Logger.getLogger(this.getClass());
+
     @Autowired
     MIPApplication mipApplication;
 
@@ -166,7 +169,7 @@ public class ModelsApi {
                 slg = new Slugify();
                 slug = slg.slugify(model.getTitle());
             } catch (IOException e) {
-                e.printStackTrace();
+                logger.trace(e);
             }
 
             i = 0;
diff --git a/src/main/java/org/hbp/mip/utils/CSVUtil.java b/src/main/java/org/hbp/mip/utils/CSVUtil.java
index f2360b7be9dd248a0ec62994a8c7fe5171e16a35..c001e83b3bd467d814d122299df88bdb22d35a00 100644
--- a/src/main/java/org/hbp/mip/utils/CSVUtil.java
+++ b/src/main/java/org/hbp/mip/utils/CSVUtil.java
@@ -1,5 +1,6 @@
 package org.hbp.mip.utils;
 
+import org.apache.log4j.Logger;
 import org.hbp.mip.model.Dataset;
 import org.hbp.mip.model.Query;
 import org.hbp.mip.model.Variable;
@@ -19,6 +20,8 @@ import java.util.stream.Collectors;
  */
 public class CSVUtil {
 
+    private static Logger logger = Logger.getLogger(CSVUtil.class);
+
     private static final String SEPARATOR = ",";
 
     public static Dataset parseValues(String filename, Query query)
@@ -26,7 +29,7 @@ public class CSVUtil {
         List<String[]> rows = getRows(filename);
 
         Dataset result = new Dataset();
-        String code = GenerateDSCode(query);
+        String code = generateDSCode(query);
         Date date = new Date();
         List<String> header = new LinkedList<>();
         List<String> grouping = new LinkedList<>();
@@ -140,7 +143,7 @@ public class CSVUtil {
                 data.put(c, ll);
             }
         } catch (IOException e) {
-            e.printStackTrace();
+            logger.trace(e);
         }
         result.setCode(code);
         result.setDate(date);
@@ -167,7 +170,8 @@ public class CSVUtil {
             isr.close();
             is.close();
         } catch (IOException e) {
-            e.printStackTrace();
+            logger.trace(e);
+            logger.warn("A problem occured while trying to read a CSV file !");
         }
 
         return rows;
@@ -181,7 +185,7 @@ public class CSVUtil {
         return -1;
     }
 
-    private static String GenerateDSCode(Query query) {
+    private static String generateDSCode(Query query) {
         String prefix = "DS";
         String queryStr = Integer.toString(query.hashCode());
         String memId;