diff --git a/src/Controllers/AuditorController.ts b/src/Controllers/AuditorController.ts
index dc513293196d71d2d0b60cf9baade3d4a20b88c5..a060e8ade79b8308be9c611e34d74f834f6762a8 100644
--- a/src/Controllers/AuditorController.ts
+++ b/src/Controllers/AuditorController.ts
@@ -1,9 +1,8 @@
 import {
   Request, Response, Router,
 } from 'express';
-import AuditDTO from '../DTOs/AuditDTO';
-import logger from '../Logger/logger';
 import Auditor from '../Services/Auditor';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
@@ -11,11 +10,10 @@ const auditGet = async (req: Request, res: Response) => {
   try {
     const token = req.headers.authorization;
     const audits = await Auditor.getAudit(Number(req.query.cant), Number(req.query.page), token);
-    return res.status(200).send(audits);
+    return logAndRespond(res, 200, 'send', audits, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/CalculatorController.ts b/src/Controllers/CalculatorController.ts
index 4ffff20c8989fc86c4dd1b5e3008d894bc771b4e..e5c3b6c6dd4fecc8a1ba27cb39866b59e0749019 100644
--- a/src/Controllers/CalculatorController.ts
+++ b/src/Controllers/CalculatorController.ts
@@ -7,6 +7,7 @@ import CalculatorResponse from '../DTOs/CalculatorResponseDTO';
 import logger from '../Logger/logger';
 import getRepBody from '../Schemas/getRepBody';
 import { audit } from '../Services/Auditor';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
@@ -18,11 +19,10 @@ const getREP: Handler = async (req: Request, res: Response) => {
     const EnergyReq: CalculatorResponse = await CalculatorService
       .calculateEnergeticRequirement(groups, extraData);
     audit(req, 'Calculó el REP');
-    return res.status(200).send(EnergyReq);
+    return logAndRespond(res, 200, 'send', EnergyReq, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/FAQController.ts b/src/Controllers/FAQController.ts
index 4ed26253f4da0d96a5a3029b34e78d272a6d9d19..53369d0af0290e5fefccc8ab11f150917d7e8564 100644
--- a/src/Controllers/FAQController.ts
+++ b/src/Controllers/FAQController.ts
@@ -2,16 +2,16 @@ import { Request, Response, Router } from 'express';
 import FAQ from '../Models/FAQ';
 import FAQService from '../Services/FAQService';
 import { FAQDTO } from '../DTOs/FAQDTO';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
 const list = async (req: Request, res: Response): Promise<Response> => {
   try {
     const faqs: FAQ[] = await FAQService.list();
-    return res.status(200).send(faqs);
+    return logAndRespond(res, 200, 'send', faqs, 'info', null, null);
   } catch (error) {
-    console.log('error');
-    return res.status(400).send('list error');
+    return logAndRespond(res, 400, 'send', 'list error', 'info', null, null);
   }
 };
 
@@ -19,10 +19,9 @@ const create = async (req: Request, res: Response): Promise<Response> => {
   try {
     const dto: FAQDTO = req.body;
     const newFAQ: FAQ = await FAQService.create(dto);
-    return res.status(200).send(newFAQ);
+    return logAndRespond(res, 200, 'send', newFAQ, 'info', null, null);
   } catch (error) {
-    console.log(error);
-    return res.status(400).send('create error');
+    return logAndRespond(res, 400, 'send', 'create error', 'info', null, null);
   }
 };
 
@@ -32,12 +31,11 @@ const update = async (req: Request, res: Response): Promise<Response> => {
     const faqId = Number(req.params.id);
     const updatedFAQ: FAQ | null = await FAQService.update(faqId, dto);
     if (updatedFAQ) {
-      return res.status(200).send(updatedFAQ);
+      return logAndRespond(res, 200, 'send', updatedFAQ, 'info', null, null);
     }
-    return res.status(400).send('id error');
+    return logAndRespond(res, 404, 'send', 'id not found', 'info', null, null);
   } catch (error) {
-    console.log(error);
-    return res.status(400).send('update error');
+    return logAndRespond(res, 400, 'send', 'update error', 'info', null, null);
   }
 };
 
@@ -46,11 +44,11 @@ const deleteFAQ = async (req: Request, res: Response): Promise<Response> => {
     const faqId = Number(req.params.id);
     const success: boolean = await FAQService.deleteFAQ(faqId);
     if (success) {
-      return res.status(200).send(success);
+      logAndRespond(res, 200, 'send', success, 'info', null, null);
     }
-    return res.status(400).send(success);
+    return logAndRespond(res, 404, 'send', 'id not found', 'info', null, null);
   } catch (error) {
-    return res.status(400).send('delete error');
+    return logAndRespond(res, 400, 'send', 'delete error', 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/ParameterController.ts b/src/Controllers/ParameterController.ts
index c15ca265dbd493d41d627263f10a00282ee3422d..ed8ccdfb28e868f34f9e409bbd8297bf3e8f31d1 100644
--- a/src/Controllers/ParameterController.ts
+++ b/src/Controllers/ParameterController.ts
@@ -7,6 +7,7 @@ import logger from '../Logger/logger';
 import updateParameterValueBody from '../Schemas/updateParameterValueBody';
 import { audit } from '../Services/Auditor';
 import ParameterService from '../Services/ParameterService';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
@@ -15,33 +16,30 @@ const { validate } = new Validator({});
 const getParameters: Handler = async (req: Request, res: Response) => {
   try {
     const parameters = await ParameterService.getParameters();
-    return res.status(200).send(parameters);
+    logAndRespond(res, 200, 'send', parameters, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
 const getDefaultWeights: Handler = async (req: Request, res: Response) => {
   try {
     const weights = await ParameterService.getDefaultWeights();
-    return res.status(200).send(weights);
+    logAndRespond(res, 200, 'send', weights, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
 const getDefaultExtraData: Handler = async (req: Request, res: Response) => {
   try {
     const extraData = await ParameterService.getDefaultExtraData();
-    return res.status(200).send(extraData);
+    logAndRespond(res, 200, 'send', extraData, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -70,11 +68,10 @@ const updateParameterValue: Handler = async (req: Request, res: Response) => {
         break;
     }
     audit(req, `Cambió el parametro ${parameters[0].parameterType} a ${parameters[0].value} para ${parameters[0].sex} ${parameters[0].ageRang} `);
-    return res.status(200).send();
+    logAndRespond(res, 200, 'send', 'Parameter changed', 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/SheetController.ts b/src/Controllers/SheetController.ts
index b5ae02a84fa88a2f84906f45efee8af1f68694a5..f9c99ed99f770f128c35565c73da06748819789a 100644
--- a/src/Controllers/SheetController.ts
+++ b/src/Controllers/SheetController.ts
@@ -5,6 +5,7 @@ import SheetService from '../Services/SheetService';
 import logger from '../Logger/logger';
 import AgeGroupJSON from '../DTOs/AgeGroupJSON';
 import { audit } from '../Services/Auditor';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
@@ -13,11 +14,10 @@ const parseSheet: Handler = async (req: Request, res: Response) => {
   try {
     const parsedSheet: AgeGroupJSON[] = SheetService.parseSheetService(sheet);
     audit(req, 'Usó una planilla para ingresar datos');
-    return res.status(200).send(parsedSheet);
+    logAndRespond(res, 200, 'send', parsedSheet, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    logger.info(e.message);
-    return res.status(400).json({ error: e.message });
+    logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/UserController.ts b/src/Controllers/UserController.ts
index 085fd95b7b5f0ba88e73da922673b3e25bf858b1..b55ce11bd7427b2114fb099f4c7e30e7af9b38f6 100644
--- a/src/Controllers/UserController.ts
+++ b/src/Controllers/UserController.ts
@@ -5,16 +5,17 @@ import {
   Handler, Request, Response, Router,
 } from 'express';
 import UserAPI from '../Services/UserAPI';
+import { logAndRespond } from './Utils';
 
 const router = Router();
 
 const create: Handler = async (req: Request, res: Response) => {
   try {
     const user: any = await UserAPI.create(req.body);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -23,20 +24,20 @@ const listUsers: Handler = async (req: Request, res: Response) => {
     const token: any = req.headers.authorization;
     const userList: any = await
     UserAPI.listUsers(req.query.type, req.query.limit, req.query.offset, req.query.search, token);
-    return res.status(200).send(userList);
+    return logAndRespond(res, 200, 'send', userList, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
 const login: Handler = async (req: Request, res: Response) => {
   try {
     const { token, user }: any = await UserAPI.login(req.body);
-    return res.status(200).send({ token, user });
+    return logAndRespond(res, 200, 'send', { token, user }, 'info', null, ['token']);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -44,10 +45,10 @@ const update: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.update(req.body, req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, ['token']);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -55,10 +56,10 @@ const password: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.password(req.body, req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -66,10 +67,10 @@ const approve: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.approve(req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -77,10 +78,10 @@ const cancel: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.cancel(req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -88,10 +89,10 @@ const giveAdminPermission: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.giveAdminPermission(req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -99,10 +100,10 @@ const removeAdminPermission: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.removeAdminPermission(req.params.id, token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -110,10 +111,10 @@ const checkUser: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.checkUser(token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
@@ -121,10 +122,10 @@ const getUser: Handler = async (req: Request, res: Response) => {
   try {
     const token: any = req.headers.authorization;
     const user: any = await UserAPI.getUser(Number(req.params.id), token);
-    return res.status(200).send(user);
+    return logAndRespond(res, 200, 'send', user, 'info', null, null);
   } catch (error) {
     const e = error as Error;
-    return res.status(400).json({ error: e.message });
+    return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null);
   }
 };
 
diff --git a/src/Controllers/Utils.ts b/src/Controllers/Utils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f4cd281b825423bfc4c1f891d21bc6c583f7afaa
--- /dev/null
+++ b/src/Controllers/Utils.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+import { Response } from 'express';
+import logger from '../Logger/logger';
+
+// eslint-disable-next-line max-len
+export const logAndRespond = (response: any, statusCode: number, method: string, responseBody: any, logLevel: string, error: any, keysToHide: string[]|null): Promise<Response> => {
+  const responseBodyToLog = {
+    ...responseBody,
+  };
+  if (keysToHide !== null) {
+    for (let i = 0; i < keysToHide.length; i += 1) {
+      if (typeof responseBodyToLog[keysToHide[i]] !== 'undefined') {
+        responseBodyToLog[keysToHide[i]] = '__HIDDEN__';
+      }
+    }
+  }
+  if (logLevel === 'info') {
+    logger.info(`Request responded [HTTP ${statusCode}]`, { response: responseBodyToLog });
+  } else if (logLevel === 'warn') {
+    logger.warn(`Request responded [HTTP ${statusCode}]`, { response: responseBodyToLog });
+  } else if (logLevel === 'error') {
+    logger.error(error, { response: responseBodyToLog });
+  }
+  let res;
+  if (method === 'json') {
+    res = response.status(statusCode).json(responseBody);
+  } else if (method === 'send') {
+    res = response.status(statusCode).send(responseBody);
+  } else {
+    throw new Error('Unknown method');
+  }
+  return res;
+};