diff --git a/neutron_policy_server/tests/test_neutron_address_pair.py b/neutron_policy_server/tests/test_neutron_address_pair.py
index 80c734c..99f49c0 100644
--- a/neutron_policy_server/tests/test_neutron_address_pair.py
+++ b/neutron_policy_server/tests/test_neutron_address_pair.py
@@ -137,7 +137,14 @@
             "/port-delete", json=self.delete_port_json
         )  # pylint: disable=E1101
         self.assertEqual(
-            b"Address pairs dependency found for this port.", response.data
+            bytes(
+                (
+                    "Address pairs dependency found for port: "
+                    f"{self.port['port']['id']}"
+                ),
+                "utf-8",
+            ),
+            response.data,
         )
         self.assertEqual(403, response.status_code)
 
@@ -159,15 +166,22 @@
         response = self.client.post(
             "/port-update", json=self.update_port_not_exist
         )  # pylint: disable=E1101
-        self.assertEqual(b"No match port found.", response.data)
-        self.assertEqual(403, response.status_code)
+        self.assertEqual(b"True", response.data)
+        self.assertEqual(200, response.status_code)
 
     def test_port_update_fail(self):
         response = self.client.post(
             "/port-update", json=self.update_port
         )  # pylint: disable=E1101
         self.assertEqual(
-            b"Address pairs dependency found for this port.", response.data
+            bytes(
+                (
+                    "Address pairs dependency found for port: "
+                    f"{self.port['port']['id']}"
+                ),
+                "utf-8",
+            ),
+            response.data,
         )
         self.assertEqual(403, response.status_code)
 
diff --git a/neutron_policy_server/wsgi.py b/neutron_policy_server/wsgi.py
index 4ac5256..0e2561c 100644
--- a/neutron_policy_server/wsgi.py
+++ b/neutron_policy_server/wsgi.py
@@ -11,11 +11,14 @@
 from neutron.objects.port.extensions import allowedaddresspairs as aap_obj
 from neutron_lib import context
 from neutron_lib.db import api as db_api
+from oslo_log import log as logging
 
 config.register_common_config_options()
 config.init(sys.argv[1:])
 config.setup_logging()
 
+LOG = logging.getLogger(__name__)
+
 app = Flask(__name__)
 
 
@@ -80,12 +83,24 @@
         and ("mac_address" not in g.target["attributes_to_update"])
         and ("fixed_ips" not in g.target["attributes_to_update"])
     ):
+        LOG.info(
+            "No mac_address or fixed_ips in update targets for port "
+            f"{g.target['id']}, skip check."
+        )
         return Response("True", status=200, mimetype="text/plain")
 
     with db_api.CONTEXT_READER.using(g.ctx):
-        ports = port_obj.Port.get_objects(g.ctx, id=g.target["id"])
+        ports = port_obj.Port.get_objects(g.ctx, id=[g.target["id"]])
         if len(ports) == 0:
-            return Response("No match port found.", status=403, mimetype="text/plain")
+            # Note(ricolin): This happens with ports that are not well defined
+            # and missing context factors like project_id.
+            # Which port usually created by services and design for internal
+            # uses. We can skip this check and avoid blocking services.
+            LOG.info(
+                f"Can't fetch port {g.target['id']} with current "
+                "context, skip this check."
+            )
+            return Response("True", status=200, mimetype="text/plain")
 
         fixed_ips = [str(fixed_ip["ip_address"]) for fixed_ip in ports[0].fixed_ips]
 
@@ -102,11 +117,11 @@
         for db_obj in query.all()
     ]
     if len(pairs) > 0:
-        return Response(
-            "Address pairs dependency found for this port.",
-            status=403,
-            mimetype="text/plain",
-        )
+        msg = f"Address pairs dependency found for port: {g.target['id']}"
+        LOG.info(msg)
+        return Response(msg, status=403, mimetype="text/plain")
+
+    LOG.info(f"Update check passed for port: {g.target['id']}")
     return Response("True", status=200, mimetype="text/plain")
 
 
@@ -130,18 +145,18 @@
         for db_obj in query.all()
     ]
     if len(pairs) > 0:
-        return Response(
-            "Address pairs dependency found for this port.",
-            status=403,
-            mimetype="text/plain",
-        )
+        msg = f"Address pairs dependency found for port: {g.target['id']}"
+        LOG.info(msg)
+        return Response(msg, status=403, mimetype="text/plain")
+
+    LOG.info(f"Delete check passed for port: {g.target['id']}")
     return Response("True", status=200, mimetype="text/plain")
 
 
 @app.route("/health", methods=["GET"])
 def health_check():
     with db_api.CONTEXT_READER.using(g.ctx):
-        port_obj.Port.get_objects(g.ctx, id="neutron_policy_server_health_check")
+        port_obj.Port.get_objects(g.ctx, id=["neutron_policy_server_health_check"])
         return Response(status=200)
 
 
