diff --git a/docker-compose.yaml b/docker-compose.yaml
index 7a00f4f057bcb9fbc1f0f671286b7ffe53eaabcf..ebb7c30e9c89bcde47299eebab0f75e82d148014 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -13,7 +13,7 @@ services:
   soap-service-db:
     image: mysql:latest
     ports:
-      - "3307:3306"
+      - 3307:3306
     env_file: .env
     hostname: tubes-soap-db
 volumes:
diff --git a/pom.xml b/pom.xml
index 4764cad3781d46cd3f8d8f111abec51c07e30b74..71a9a502cc999e5c2e8faac2a57871826846f827 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,12 @@
             <artifactId>hibernate-core</artifactId>
             <version>5.6.0.Final</version>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>4.0.1</version>
+            <scope>provided</scope>
+        </dependency>
         <!-- <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
diff --git a/src/main/java/soapserver/handlers/LoggingHandler.java b/src/main/java/soapserver/handlers/LoggingHandler.java
index aa863108bce9f357b41531d6a747c04b85dd4a1f..42517199efb8444b5f50c482506524f305130a2d 100644
--- a/src/main/java/soapserver/handlers/LoggingHandler.java
+++ b/src/main/java/soapserver/handlers/LoggingHandler.java
@@ -1,15 +1,21 @@
 package soapserver.handlers;
 
-import java.util.Set;
+import java.io.ByteArrayOutputStream;
 import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.handler.MessageContext;
 import javax.xml.ws.handler.soap.SOAPHandler;
 import javax.xml.ws.handler.soap.SOAPMessageContext;
 
+import io.github.cdimascio.dotenv.Dotenv;
 import soapserver.repositories.LoggingRepostitory;
 
 public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
@@ -20,19 +26,43 @@ public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
   }
 
   public boolean handleMessage(SOAPMessageContext messageContext) {
-    boolean isOutbound = (boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+    try {
+      boolean isOutbound = (boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+
+      // Only intercepts inbound message
+      if (!isOutbound) {
+        SOAPMessage soapMessage = messageContext.getMessage();
+        SOAPBody soapBody = soapMessage.getSOAPBody();
+        SOAPHeader soapHeader = soapMessage.getSOAPHeader();
+
+        String method = soapBody.getChildNodes().item(1).getLocalName();
+
+        // API key validation
+        String key = soapHeader.getChildNodes().item(0).getTextContent();
+        if (!(key.equals(Dotenv.load().get("REST_SOAP_KEY")))) {
+          return false;
+        }
 
-    // Only intercepts inbound message
-    if (!isOutbound) {
-      @SuppressWarnings("unchecked")
-      Map<String, List<String>> requestHeaders = (Map<String, List<String>>) messageContext
-          .get(MessageContext.HTTP_REQUEST_HEADERS);
-      System.out.println(requestHeaders);
-      String host = requestHeaders.get("host").get(0);
+        // Get request description
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        soapMessage.writeTo(output);
+        String messageString = new String(output.toByteArray());
 
-      loggingRepostitory.addNewLog(host);
+        String description = messageString.substring(messageString.indexOf("<soap:Body>"));
+        description = description.substring(0, description.indexOf("</soap:Envelope>"));
+
+        // Get remote address
+        HttpServletRequest request = (HttpServletRequest) messageContext.get(MessageContext.SERVLET_REQUEST);
+        String origin = request.getRemoteAddr();
+
+        loggingRepostitory.addNewLog(origin, method, description);
+      }
+
+      return true;
+    } catch (Exception e) {
+      System.out.println(e.getMessage());
+      return false;
     }
-    return true;
   }
 
   public boolean handleFault(SOAPMessageContext messageContext) {
diff --git a/src/main/java/soapserver/models/Log.java b/src/main/java/soapserver/models/Log.java
index 7ec816a348c5bab30188072d1d6484c36d2ac3e9..9f89980b9cc150825b1707a4d815dcd4b19779c5 100644
--- a/src/main/java/soapserver/models/Log.java
+++ b/src/main/java/soapserver/models/Log.java
@@ -21,5 +21,9 @@ public class Log implements Serializable {
   private Timestamp time;
 
   @Id
-  private String host;
+  private String origin;
+
+  private String method;
+
+  private String description;
 }
diff --git a/src/main/java/soapserver/repositories/LoggingRepostitory.java b/src/main/java/soapserver/repositories/LoggingRepostitory.java
index 720c87ef94ae60df5249730d472544278363f7e8..96ded23c462f7114e469a6d2141a6d036c8721d5 100644
--- a/src/main/java/soapserver/repositories/LoggingRepostitory.java
+++ b/src/main/java/soapserver/repositories/LoggingRepostitory.java
@@ -9,7 +9,7 @@ import soapserver.models.Log;
 import soapserver.utils.HibernateUtil;
 
 public class LoggingRepostitory {
-  public boolean addNewLog(String host) {
+  public boolean addNewLog(String origin, String method, String description) {
     try {
       SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
       Session session = sessionFactory.getCurrentSession();
@@ -17,8 +17,10 @@ public class LoggingRepostitory {
       session.beginTransaction();
 
       Log log = new Log();
-      log.setHost(host);
+      log.setOrigin(origin);
       log.setTime(new Timestamp(System.currentTimeMillis()));
+      log.setMethod(method);
+      log.setDescription(description);
       session.save(log);
 
       session.getTransaction().commit();
diff --git a/src/main/java/soapserver/repositories/SubscriptionRepository.java b/src/main/java/soapserver/repositories/SubscriptionRepository.java
index 2bf8f766e0eb2b03dafd9f7af85e8f88cbe2a8c3..52ad9ed82309bb8c61f9d0201dda1939f12c6b95 100644
--- a/src/main/java/soapserver/repositories/SubscriptionRepository.java
+++ b/src/main/java/soapserver/repositories/SubscriptionRepository.java
@@ -68,10 +68,9 @@ public class SubscriptionRepository {
         return false;
       }
 
+      // Check expiration time
       Timestamp expirationDate = userSubscription.getExpiration_date();
       Timestamp currentTime = new Timestamp(System.currentTimeMillis());
-      System.out.println(expirationDate);
-      System.out.println(currentTime);
       if (expirationDate.compareTo(currentTime) < 0) {
         return false;
       }