diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
index ed1b2be..4602185 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
@@ -16,6 +16,7 @@
 package org.onosproject.ofagent.api;
 
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
 
 import java.util.Set;
 
@@ -25,6 +26,8 @@
  */
 public interface OFAgent {
 
+    String TRACER_LOG_TENANT_ID_PREFIX = "OFAGENT_tenantId:";
+
     enum State {
 
         /**
@@ -46,6 +49,13 @@
     NetworkId networkId();
 
     /**
+     * Returns the identifier of the tenant which owns virtual network this agent cares for.
+     *
+     * @return id of the tenant
+     */
+    TenantId tenantId();
+
+    /**
      * Returns the external OpenFlow controllers of the virtual network.
      *
      * @return set of openflow controllers
@@ -89,6 +99,14 @@
         Builder networkId(NetworkId networkId);
 
         /**
+         * Returns OF agent builder with the supplied tenant ID.
+         *
+         * @param tenantId id of the virtual network
+         * @return of agent builder
+         */
+        Builder tenantId(TenantId tenantId);
+
+        /**
          * Returns OF agent builder with the supplied controllers.
          *
          * @param controllers set of openflow controllers
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
index 101a1ff..b70d191 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
@@ -22,6 +22,8 @@
 import org.onlab.packet.TpPort;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
 import org.onosproject.ofagent.api.OFAgent;
 import org.onosproject.ofagent.api.OFAgentAdminService;
 import org.onosproject.ofagent.api.OFController;
@@ -30,6 +32,8 @@
 
 import java.util.Set;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Creates a new OFAagent.
  */
@@ -60,14 +64,18 @@
                     TpPort.tpPort(Integer.valueOf(temp[1]))));
         }
 
+        VirtualNetworkService virtualNetworkService = get(VirtualNetworkService.class);
+        TenantId tenantId = virtualNetworkService.getTenantId(NetworkId.networkId(networkId));
+        checkNotNull(tenantId, "Virtual network %s does not have tenant.", networkId);
         OFAgentAdminService adminService = get(OFAgentAdminService.class);
         OFAgent ofAgent = DefaultOFAgent.builder()
                 .networkId(NetworkId.networkId(networkId))
+                .tenantId(tenantId)
                 .controllers(ctrls)
                 .state(OFAgent.State.STOPPED)
                 .build();
         adminService.createAgent(ofAgent);
-        print("Successfully created OFAgent for network %s", networkId);
+        print("Successfully created OFAgent for network %s, tenant %s", networkId, tenantId);
     }
 
     private boolean isValidController(String ctrl) {
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
index c82dc94..d87e474 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
 import org.onosproject.ofagent.api.OFAgent;
 import org.onosproject.ofagent.api.OFController;
 
@@ -33,13 +34,16 @@
 public final class DefaultOFAgent implements OFAgent {
 
     private final NetworkId networkId;
+    private final TenantId tenantId;
+
     private final Set<OFController> controllers;
     private final State state;
 
-    private DefaultOFAgent(NetworkId networkId,
+    private DefaultOFAgent(NetworkId networkId, TenantId tenantId,
                            Set<OFController> controllers,
                            State state) {
         this.networkId = networkId;
+        this.tenantId = tenantId;
         this.controllers = controllers;
         this.state = state;
     }
@@ -50,6 +54,11 @@
     }
 
     @Override
+    public TenantId tenantId() {
+        return tenantId;
+    }
+
+    @Override
     public Set<OFController> controllers() {
         return controllers;
     }
@@ -83,6 +92,7 @@
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("networkId", this.networkId)
+                .add("tenantId", this.tenantId)
                 .add("controllers", this.controllers)
                 .add("state", this.state)
                 .toString();
@@ -100,6 +110,7 @@
     public static final class Builder implements OFAgent.Builder {
 
         private NetworkId networkId;
+        private TenantId tenantId;
         private Set<OFController> controllers = Sets.newHashSet();
         private State state;
 
@@ -109,15 +120,17 @@
         @Override
         public OFAgent build() {
             checkNotNull(networkId, "Network ID cannot be null");
+            checkNotNull(tenantId, "Tenant ID cannot be null");
             checkNotNull(state, "State cannot be null");
             controllers = controllers == null ? ImmutableSet.of() : controllers;
 
-            return new DefaultOFAgent(networkId, controllers, state);
+            return new DefaultOFAgent(networkId, tenantId, controllers, state);
         }
 
         @Override
         public Builder from(OFAgent ofAgent) {
             this.networkId = ofAgent.networkId();
+            this.tenantId = ofAgent.tenantId();
             this.controllers = Sets.newHashSet(ofAgent.controllers());
             this.state = ofAgent.state();
             return this;
@@ -130,6 +143,12 @@
         }
 
         @Override
+        public Builder tenantId(TenantId tenantId) {
+            this.tenantId = tenantId;
+            return this;
+        }
+
+        @Override
         public Builder controllers(Set<OFController> controllers) {
             this.controllers = controllers;
             return this;
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
index 3c04364..1fbd561 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
@@ -49,6 +49,7 @@
 import org.onosproject.net.meter.MeterRequest;
 import org.onosproject.net.meter.MeterService;
 import org.onosproject.net.packet.InboundPacket;
+import org.onosproject.ofagent.api.OFAgent;
 import org.onosproject.ofagent.api.OFSwitch;
 import org.onosproject.ofagent.api.OFSwitchCapabilities;
 import org.onosproject.ofagent.api.OFSwitchService;
@@ -176,7 +177,9 @@
         this.flowRuleService = virtualNetworkService.get(networkId, FlowRuleService.class);
         this.groupService = virtualNetworkService.get(networkId, GroupService.class);
         this.meterService = virtualNetworkService.get(networkId, MeterService.class);
-        log = LoggerFactory.getLogger(getClass().getName() + " : " + dpid);
+
+        log = LoggerFactory.getLogger(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + virtualNetworkService.getTenantId(networkId)
+                                              + " " + getClass().getSimpleName() + " : " + dpid);
     }
 
     public static DefaultOFSwitch of(DatapathId dpid, OFSwitchCapabilities capabilities,
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
index e405c14..7e41243 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
@@ -26,6 +26,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
 import org.onosproject.ofagent.api.OFAgent;
 import org.onosproject.ofagent.api.OFAgentEvent;
 import org.onosproject.ofagent.api.OFAgentEvent.Type;
@@ -72,6 +73,7 @@
             .register(OFAgent.class)
             .register(OFAgent.State.class)
             .register(NetworkId.class)
+            .register(TenantId.class)
             .register(DefaultOFAgent.class)
             .register(OFController.class)
             .register(DefaultOFController.class)
@@ -155,7 +157,8 @@
             switch (event.type()) {
                 case INSERT:
                     eventExecutor.execute(() -> {
-                        log.debug("OFAgent for network {} created", event.key());
+                        log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.newValue().value().tenantId()
+                                          + " OFAgent for network {} created", event.key());
                         notifyDelegate(new OFAgentEvent(
                                 Type.OFAGENT_CREATED,
                                 event.newValue().value()));
@@ -163,13 +166,15 @@
                     break;
                 case UPDATE:
                     eventExecutor.execute(() -> {
-                        log.debug("OFAgent for network {} updated", event.key());
+                        log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.newValue().value().tenantId()
+                                          + " OFAgent for network {} updated", event.key());
                         processUpdated(event.oldValue().value(), event.newValue().value());
                     });
                     break;
                 case REMOVE:
                     eventExecutor.execute(() -> {
-                        log.debug("OFAgent for network {} removed", event.key());
+                        log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.oldValue().value().tenantId()
+                                          + " OFAgent for network {} removed", event.key());
                         notifyDelegate(new OFAgentEvent(
                                 Type.OFAGENT_REMOVED,
                                 event.oldValue().value()));
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
index aae3614..4b8683c 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
@@ -23,6 +23,7 @@
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
 import org.onosproject.ofagent.api.OFAgent;
 import org.onosproject.ofagent.api.OFController;
 import org.onosproject.ofagent.impl.DefaultOFAgent;
@@ -45,6 +46,7 @@
         ObjectNode ofAgentNode = mapper.createObjectNode();
         ofAgentNode
                 .put("networkId", ofAgent.networkId().toString())
+                .put("tenantId", ofAgent.tenantId().toString())
                 .put("state", ofAgent.state().toString());
 
         ArrayNode controllers = mapper.createArrayNode();
@@ -59,6 +61,9 @@
         JsonNode networkId = json.get("networkId");
         checkNotNull(networkId);
 
+        JsonNode tenantId = json.get("tenantId");
+        checkNotNull(tenantId);
+
         checkNotNull(json.get("controllers"));
         checkState(json.get("controllers").isArray());
         Set<OFController> controllers = Sets.newHashSet();
@@ -67,6 +72,7 @@
 
         return DefaultOFAgent.builder()
                 .networkId(NetworkId.networkId(networkId.asLong()))
+                .tenantId(TenantId.tenantId(tenantId.asText()))
                 .controllers(controllers)
                 .state(OFAgent.State.STOPPED)
                 .build();
