diff --git a/daemon/fw/face-table.cpp b/daemon/fw/face-table.cpp
index 8601598..f59ff14 100644
--- a/daemon/fw/face-table.cpp
+++ b/daemon/fw/face-table.cpp
@@ -36,7 +36,7 @@
   FaceId faceId = ++m_lastFaceId;
   face->setId(faceId);
   m_faces[faceId] = face;
-  NFD_LOG_INFO("addFace id=" << faceId);
+  NFD_LOG_INFO("Added face id=" << faceId << " uri=" << face->getUri());
 
   face->onReceiveInterest += bind(&Forwarder::onInterest,
                                   &m_forwarder, boost::ref(*face), _1);
@@ -56,7 +56,7 @@
   FaceId faceId = face->getId();
   m_faces.erase(faceId);
   face->setId(INVALID_FACEID);
-  NFD_LOG_INFO("removeFace id=" << faceId);
+  NFD_LOG_INFO("Removed face id=" << faceId << " uri=" << face->getUri());
 
   // XXX This clears all subscriptions, because EventEmitter
   //     does not support only removing Forwarder's subscription
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index 55f4d9c..e184c00 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -506,19 +506,19 @@
   UnsignedVerbDispatchTable::const_iterator unsignedVerbProcessor = m_unsignedVerbDispatch.find(verb);
   if (unsignedVerbProcessor != m_unsignedVerbDispatch.end())
     {
-      NFD_LOG_INFO("command result: processing verb: " << verb);
+      NFD_LOG_DEBUG("command result: processing verb: " << verb);
       (unsignedVerbProcessor->second)(this, boost::cref(request));
     }
   else if (COMMAND_UNSIGNED_NCOMPS <= commandNComps &&
            commandNComps < COMMAND_SIGNED_NCOMPS)
     {
-      NFD_LOG_INFO("command result: unsigned verb: " << command);
+      NFD_LOG_DEBUG("command result: unsigned verb: " << command);
       sendResponse(command, 401, "Signature required");
     }
   else if (commandNComps < COMMAND_SIGNED_NCOMPS ||
            !COMMAND_PREFIX.isPrefixOf(command))
     {
-      NFD_LOG_INFO("command result: malformed");
+      NFD_LOG_DEBUG("command result: malformed");
       sendResponse(command, 400, "Malformed command");
     }
   else
@@ -546,12 +546,12 @@
           return;
         }
 
-      NFD_LOG_INFO("command result: processing verb: " << verb);
+      NFD_LOG_DEBUG("command result: processing verb: " << verb);
       (signedVerbProcessor->second)(this, *request, parameters);
     }
   else
     {
-      NFD_LOG_INFO("command result: unsupported verb: " << verb);
+      NFD_LOG_DEBUG("command result: unsupported verb: " << verb);
       sendResponse(command, 501, "Unsupported command");
     }
 
@@ -562,7 +562,7 @@
 {
   m_faceTable.add(newFace);
 
-  NFD_LOG_INFO("Created face " << newFace->getUri() << " ID " << newFace->getId());
+  NFD_LOG_DEBUG("Created face " << newFace->getUri() << " ID " << newFace->getId());
 }
 
 void
@@ -579,7 +579,7 @@
 void
 FaceManager::onConnectFailed(const Name& requestName, const std::string& reason)
 {
-  NFD_LOG_INFO("Failed to create face: " << reason);
+  NFD_LOG_DEBUG("Failed to create face: " << reason);
   sendResponse(requestName, 400, "Failed to create face");
 }
 
@@ -681,14 +681,14 @@
 
   if (!static_cast<bool>(face))
     {
-      NFD_LOG_INFO("command result: faceid " << request.getIncomingFaceId() << " not found");
+      NFD_LOG_DEBUG("command result: faceid " << request.getIncomingFaceId() << " not found");
       sendResponse(request.getName(), 410, "Face not found");
       return false;
     }
   else if (!face->isLocal())
     {
-      NFD_LOG_INFO("command result: cannot enable local control on non-local faceid " <<
-                   face->getId());
+      NFD_LOG_DEBUG("command result: cannot enable local control on non-local faceid " <<
+                    face->getId());
       sendResponse(request.getName(), 412, "Face is non-local");
       return false;
     }
@@ -740,7 +740,7 @@
   if (commandNComps < LIST_COMMAND_NCOMPS ||
       !LIST_COMMAND_PREFIX.isPrefixOf(command))
     {
-      NFD_LOG_INFO("command result: malformed");
+      NFD_LOG_DEBUG("command result: malformed");
       sendResponse(command, 400, "Malformed command");
       return;
     }
diff --git a/daemon/mgmt/fib-manager.cpp b/daemon/mgmt/fib-manager.cpp
index 34554e6..75c6efb 100644
--- a/daemon/mgmt/fib-manager.cpp
+++ b/daemon/mgmt/fib-manager.cpp
@@ -89,19 +89,19 @@
   UnsignedVerbDispatchTable::const_iterator unsignedVerbProcessor = m_unsignedVerbDispatch.find(verb);
   if (unsignedVerbProcessor != m_unsignedVerbDispatch.end())
     {
-      NFD_LOG_INFO("command result: processing verb: " << verb);
+      NFD_LOG_DEBUG("command result: processing verb: " << verb);
       (unsignedVerbProcessor->second)(this, boost::cref(request));
     }
   else if (COMMAND_UNSIGNED_NCOMPS <= commandNComps &&
            commandNComps < COMMAND_SIGNED_NCOMPS)
     {
-      NFD_LOG_INFO("command result: unsigned verb: " << command);
+      NFD_LOG_DEBUG("command result: unsigned verb: " << command);
       sendResponse(command, 401, "Signature required");
     }
   else if (commandNComps < COMMAND_SIGNED_NCOMPS ||
            !COMMAND_PREFIX.isPrefixOf(command))
     {
-      NFD_LOG_INFO("command result: malformed");
+      NFD_LOG_DEBUG("command result: malformed");
       sendResponse(command, 400, "Malformed command");
     }
   else
@@ -125,7 +125,7 @@
       ControlParameters parameters;
       if (!extractParameters(parameterComponent, parameters) || !parameters.hasFaceId())
         {
-          NFD_LOG_INFO("command result: malformed verb: " << verb);
+          NFD_LOG_DEBUG("command result: malformed verb: " << verb);
           sendResponse(command, 400, "Malformed command");
           return;
         }
@@ -135,14 +135,14 @@
           parameters.setFaceId(request->getIncomingFaceId());
         }
 
-      NFD_LOG_INFO("command result: processing verb: " << verb);
+      NFD_LOG_DEBUG("command result: processing verb: " << verb);
       ControlResponse response;
       (signedVerbProcessor->second)(this, parameters, response);
       sendResponse(command, response);
     }
   else
     {
-      NFD_LOG_INFO("command result: unsupported verb: " << verb);
+      NFD_LOG_DEBUG("command result: unsupported verb: " << verb);
       sendResponse(command, 501, "Unsupported command");
     }
 }
@@ -155,7 +155,7 @@
 
   if (!validateParameters(command, parameters))
     {
-      NFD_LOG_INFO("add-nexthop result: FAIL reason: malformed");
+      NFD_LOG_DEBUG("add-nexthop result: FAIL reason: malformed");
       setResponse(response, 400, "Malformed command");
       return;
     }
@@ -164,7 +164,7 @@
   FaceId faceId = parameters.getFaceId();
   uint64_t cost = parameters.getCost();
 
-  NFD_LOG_DEBUG("add-nexthop prefix: " << prefix
+  NFD_LOG_TRACE("add-nexthop prefix: " << prefix
                 << " faceid: " << faceId
                 << " cost: " << cost);
 
@@ -175,17 +175,16 @@
 
       entry->addNextHop(nextHopFace, cost);
 
-      NFD_LOG_INFO("add-nexthop result: OK"
-                   << " prefix:" << prefix
-                   << " faceid: " << faceId
-                   << " cost: " << cost);
+      NFD_LOG_DEBUG("add-nexthop result: OK"
+                    << " prefix:" << prefix
+                    << " faceid: " << faceId
+                    << " cost: " << cost);
 
-      NFD_LOG_INFO("add-nexthop result: SUCCESS");
       setResponse(response, 200, "Success", parameters.wireEncode());
     }
   else
     {
-      NFD_LOG_INFO("add-nexthop result: FAIL reason: unknown-faceid: " << faceId);
+      NFD_LOG_DEBUG("add-nexthop result: FAIL reason: unknown-faceid: " << faceId);
       setResponse(response, 410, "Face not found");
     }
 }
@@ -197,12 +196,12 @@
   ndn::nfd::FibRemoveNextHopCommand command;
   if (!validateParameters(command, parameters))
     {
-      NFD_LOG_INFO("remove-nexthop result: FAIL reason: malformed");
+      NFD_LOG_DEBUG("remove-nexthop result: FAIL reason: malformed");
       setResponse(response, 400, "Malformed command");
       return;
     }
 
-  NFD_LOG_DEBUG("remove-nexthop prefix: " << parameters.getName()
+  NFD_LOG_TRACE("remove-nexthop prefix: " << parameters.getName()
                 << " faceid: " << parameters.getFaceId());
 
   shared_ptr<Face> faceToRemove = m_getFace(parameters.getFaceId());
@@ -212,17 +211,26 @@
       if (static_cast<bool>(entry))
         {
           entry->removeNextHop(faceToRemove);
-          NFD_LOG_INFO("remove-nexthop result: OK prefix: " << parameters.getName()
-                       << " faceid: " << parameters.getFaceId());
+          NFD_LOG_DEBUG("remove-nexthop result: OK prefix: " << parameters.getName()
+                        << " faceid: " << parameters.getFaceId());
 
           if (!entry->hasNextHops())
             {
               m_managedFib.erase(*entry);
             }
         }
+      else
+        {
+          NFD_LOG_DEBUG("remove-nexthop result: OK, but entry for face id "
+                        << parameters.getFaceId() << " not found");
+        }
+    }
+  else
+    {
+      NFD_LOG_DEBUG("remove-nexthop result: OK, but face id "
+                    << parameters.getFaceId() << " not found");
     }
 
-  NFD_LOG_INFO("remove-nexthop result: SUCCESS");
   setResponse(response, 200, "Success", parameters.wireEncode());
 }
 
@@ -235,7 +243,7 @@
   if (commandNComps < LIST_COMMAND_NCOMPS ||
       !LIST_COMMAND_PREFIX.isPrefixOf(command))
     {
-      NFD_LOG_INFO("command result: malformed");
+      NFD_LOG_DEBUG("command result: malformed");
       sendResponse(command, 400, "Malformed command");
       return;
     }
diff --git a/daemon/mgmt/manager-base.cpp b/daemon/mgmt/manager-base.cpp
index e608ffc..5296e28 100644
--- a/daemon/mgmt/manager-base.cpp
+++ b/daemon/mgmt/manager-base.cpp
@@ -100,7 +100,7 @@
 ManagerBase::onCommandValidationFailed(const shared_ptr<const Interest>& command,
                                        const std::string& error)
 {
-  NFD_LOG_INFO("command result: unauthorized command: " << *command);
+  NFD_LOG_DEBUG("command result: unauthorized command: " << *command);
   sendResponse(command->getName(), 403, "Unauthorized command");
 }
 
diff --git a/daemon/mgmt/strategy-choice-manager.cpp b/daemon/mgmt/strategy-choice-manager.cpp
index 43824f2..c226b41 100644
--- a/daemon/mgmt/strategy-choice-manager.cpp
+++ b/daemon/mgmt/strategy-choice-manager.cpp
@@ -47,7 +47,7 @@
   if (COMMAND_UNSIGNED_NCOMPS <= commandNComps &&
       commandNComps < COMMAND_SIGNED_NCOMPS)
     {
-      NFD_LOG_INFO("command result: unsigned verb: " << command);
+      NFD_LOG_DEBUG("command result: unsigned verb: " << command);
       sendResponse(command, 401, "Signature required");
 
       return;
@@ -55,7 +55,7 @@
   else if (commandNComps < COMMAND_SIGNED_NCOMPS ||
            !COMMAND_PREFIX.isPrefixOf(command))
     {
-      NFD_LOG_INFO("command result: malformed");
+      NFD_LOG_DEBUG("command result: malformed");
       sendResponse(command, 400, "Malformed command");
       return;
     }
@@ -93,7 +93,7 @@
     }
   else
     {
-      NFD_LOG_INFO("command result: unsupported verb: " << verb);
+      NFD_LOG_DEBUG("command result: unsupported verb: " << verb);
       setResponse(response, 501, "Unsupported command");
     }
 
@@ -108,7 +108,7 @@
 
   if (!validateParameters(command, parameters))
     {
-      NFD_LOG_INFO("strategy-choice result: FAIL reason: malformed");
+      NFD_LOG_DEBUG("strategy-choice result: FAIL reason: malformed");
       setResponse(response, 400, "Malformed command");
       return;
     }
@@ -118,20 +118,20 @@
 
   if (!m_strategyChoice.hasStrategy(selectedStrategy))
     {
-      NFD_LOG_INFO("strategy-choice result: FAIL reason: unknown-strategy: "
-                   << parameters.getStrategy());
+      NFD_LOG_DEBUG("strategy-choice result: FAIL reason: unknown-strategy: "
+                    << parameters.getStrategy());
       setResponse(response, 504, "Unsupported strategy");
       return;
     }
 
   if (m_strategyChoice.insert(prefix, selectedStrategy))
     {
-      NFD_LOG_INFO("strategy-choice result: SUCCESS");
+      NFD_LOG_DEBUG("strategy-choice result: SUCCESS");
       setResponse(response, 200, "Success", parameters.wireEncode());
     }
   else
     {
-      NFD_LOG_INFO("strategy-choice result: FAIL reason: not-installed");
+      NFD_LOG_DEBUG("strategy-choice result: FAIL reason: not-installed");
       setResponse(response, 405, "Strategy not installed");
     }
 }
@@ -147,12 +147,12 @@
       static const Name ROOT_PREFIX;
       if (parameters.hasName() && parameters.getName() == ROOT_PREFIX)
         {
-          NFD_LOG_INFO("strategy-choice result: FAIL reason: unset-root");
+          NFD_LOG_DEBUG("strategy-choice result: FAIL reason: unset-root");
           setResponse(response, 403, "Cannot unset root prefix strategy");
         }
       else
         {
-          NFD_LOG_INFO("strategy-choice result: FAIL reason: malformed");
+          NFD_LOG_DEBUG("strategy-choice result: FAIL reason: malformed");
           setResponse(response, 400, "Malformed command");
         }
       return;
@@ -160,7 +160,7 @@
 
   m_strategyChoice.erase(parameters.getName());
 
-  NFD_LOG_INFO("strategy-choice result: SUCCESS");
+  NFD_LOG_DEBUG("strategy-choice result: SUCCESS");
   setResponse(response, 200, "Success", parameters.wireEncode());
 }
 
diff --git a/daemon/table/cs-entry.cpp b/daemon/table/cs-entry.cpp
index c98a66c..044fd45 100644
--- a/daemon/table/cs-entry.cpp
+++ b/daemon/table/cs-entry.cpp
@@ -134,7 +134,7 @@
        it != m_layerIterators.end();
        ++it)
     {
-      NFD_LOG_DEBUG("[" << it->first << "]" << " " << &(*it->second));
+      NFD_LOG_TRACE("[" << it->first << "]" << " " << &(*it->second));
     }
 }
 
diff --git a/daemon/table/cs.cpp b/daemon/table/cs.cpp
index a4c0525..3dc788a 100644
--- a/daemon/table/cs.cpp
+++ b/daemon/table/cs.cpp
@@ -58,8 +58,8 @@
 std::pair< shared_ptr<cs::Entry>, bool>
 Cs::insertToSkipList(const Data& data, bool isUnsolicited)
 {
-  NFD_LOG_INFO("insertToSkipList() " << data.getName());
-  NFD_LOG_DEBUG("SkipList size " << size());
+  NFD_LOG_TRACE("insertToSkipList() " << data.getName() << ", "
+                << "skipList size " << size());
 
   shared_ptr<cs::Entry> entry = make_shared<cs::Entry>(data, isUnsolicited);
 
@@ -131,14 +131,14 @@
   //check if this is a duplicate packet
   if (isNameIdentical)
     {
-      NFD_LOG_DEBUG("Duplicate name (with digest)");
+      NFD_LOG_TRACE("Duplicate name (with digest)");
 
       (*head)->setData(data, entry->getDigest()); //updates stale time
 
       return std::make_pair(*head, false);
     }
 
-  NFD_LOG_DEBUG("Not a duplicate");
+  NFD_LOG_TRACE("Not a duplicate");
 
   size_t randomLayer = pickRandomLayer();
 
@@ -161,18 +161,18 @@
           --last;
           entry->setIterator(layer, last);
 
-          NFD_LOG_DEBUG("pushback " << &(*last));
+          NFD_LOG_TRACE("pushback " << &(*last));
         }
       else if (updateTable[layer] == (*i)->end() && insertInFront)
         {
           (*i)->push_front(entry);
           entry->setIterator(layer, (*i)->begin());
 
-          NFD_LOG_DEBUG("pushfront ");
+          NFD_LOG_TRACE("pushfront ");
         }
       else
         {
-          NFD_LOG_DEBUG("insertafter");
+          NFD_LOG_TRACE("insertafter");
           ++updateTable[layer]; // insert after
           SkipListLayer::iterator position = (*i)->insert(updateTable[layer], entry);
           entry->setIterator(layer, position); // save iterator where item was inserted
@@ -188,7 +188,7 @@
 bool
 Cs::insert(const Data& data, bool isUnsolicited)
 {
-  NFD_LOG_INFO("insert() " << data.getName());
+  NFD_LOG_TRACE("insert() " << data.getName());
 
   if (isFull())
     {
@@ -241,8 +241,8 @@
 bool
 Cs::eraseFromSkipList(shared_ptr<cs::Entry> entry)
 {
-  NFD_LOG_INFO("eraseFromSkipList() "  << entry->getName());
-  NFD_LOG_DEBUG("SkipList size " << size());
+  NFD_LOG_TRACE("eraseFromSkipList() "  << entry->getName());
+  NFD_LOG_TRACE("SkipList size " << size());
 
   bool isErased = false;
 
@@ -280,12 +280,12 @@
 bool
 Cs::evictItem()
 {
-  NFD_LOG_INFO("evictItem()");
+  NFD_LOG_TRACE("evictItem()");
 
   //because there is a possibility that this item is in a queue, but no longer in skiplist
   while ( !m_unsolicitedContent.empty() )
     {
-      NFD_LOG_DEBUG("Evict from unsolicited queue");
+      NFD_LOG_TRACE("Evict from unsolicited queue");
 
       shared_ptr<cs::Entry> entry = m_unsolicitedContent.front();
       m_unsolicitedContent.pop();
@@ -299,7 +299,7 @@
   int nIterations = size() * 0.01;  // 1% of the Content Store
   while ( !m_contentByStaleness.empty() )
     {
-      NFD_LOG_DEBUG("Evict from staleness queue");
+      NFD_LOG_TRACE("Evict from staleness queue");
 
       shared_ptr<cs::Entry> entry = m_contentByStaleness.top();
 
@@ -332,7 +332,7 @@
   //because there is a possibility that this item is in a queue, but no longer in skiplist
   while ( !m_contentByArrival.empty() )
     {
-      NFD_LOG_DEBUG("Evict from arrival queue");
+      NFD_LOG_TRACE("Evict from arrival queue");
 
       shared_ptr<cs::Entry> entry = m_contentByArrival.front();
       m_contentByArrival.pop();
@@ -348,7 +348,7 @@
 const Data*
 Cs::find(const Interest& interest) const
 {
-  NFD_LOG_INFO("find() " << interest.getName());
+  NFD_LOG_TRACE("find() " << interest.getName());
 
   bool isIterated = false;
   SkipList::const_reverse_iterator topLayer = m_skipList.rbegin();
@@ -385,7 +385,7 @@
 
                   while ( (*it)->getName() < interest.getName() )
                     {
-                      NFD_LOG_DEBUG((*it)->getName() << " < " << interest.getName());
+                      NFD_LOG_TRACE((*it)->getName() << " < " << interest.getName());
                       head = it;
                       isIterated = true;
 
@@ -425,7 +425,7 @@
       BOOST_ASSERT( (*startingPoint)->getName() < interest.getName() );
     }
 
-  NFD_LOG_INFO("selectChild() " << interest.getChildSelector() << " " << (*startingPoint)->getName());
+  NFD_LOG_TRACE("selectChild() " << interest.getChildSelector() << " " << (*startingPoint)->getName());
 
   bool hasLeftmostSelector = (interest.getChildSelector() <= 0);
   bool hasRightmostSelector = !hasLeftmostSelector;
@@ -496,7 +496,7 @@
                         {
                           // get prefix which is one component longer than Interest name (without digest)
                           const Name& childPrefix = (*rightmostCandidate)->getName().getPrefix(interest.getName().size());
-                          NFD_LOG_DEBUG("Child prefix" << childPrefix);
+                          NFD_LOG_TRACE("Child prefix" << childPrefix);
 
                           if ( currentChildPrefix.empty() || (childPrefix != currentChildPrefix) )
                             {
@@ -508,7 +508,7 @@
                         {
                           // get prefix which is one component longer than Interest name
                           const Name& childPrefix = (*rightmostCandidate)->getName().getPrefix(interest.getName().size() + 1);
-                          NFD_LOG_DEBUG("Child prefix" << childPrefix);
+                          NFD_LOG_TRACE("Child prefix" << childPrefix);
 
                           if ( currentChildPrefix.empty() || (childPrefix != currentChildPrefix) )
                             {
@@ -558,7 +558,7 @@
 bool
 Cs::doesComplyWithSelectors(const Interest& interest, shared_ptr<cs::Entry> entry) const
 {
-  NFD_LOG_INFO("doesComplyWithSelectors()");
+  NFD_LOG_TRACE("doesComplyWithSelectors()");
 
   /// \todo The following detection is not correct
   ///       1. If data name ends with 32-octet component doesn't mean that this component is digest
@@ -575,7 +575,7 @@
 
       if (std::memcmp(digest->buf(), last.value(), ndn::crypto::SHA256_DIGEST_SIZE) != 0)
         {
-          NFD_LOG_DEBUG("violates implicit digest");
+          NFD_LOG_TRACE("violates implicit digest");
           return false;
         }
     }
@@ -589,7 +589,7 @@
           bool isSatisfied = (minDataNameLength <= entry->getName().size());
           if ( !isSatisfied )
             {
-              NFD_LOG_DEBUG("violates minComponents");
+              NFD_LOG_TRACE("violates minComponents");
               return false;
             }
         }
@@ -601,7 +601,7 @@
           bool isSatisfied = (maxDataNameLength >= entry->getName().size());
           if ( !isSatisfied )
             {
-              NFD_LOG_DEBUG("violates maxComponents");
+              NFD_LOG_TRACE("violates maxComponents");
               return false;
             }
         }
@@ -609,7 +609,7 @@
 
   if (interest.getMustBeFresh() && entry->getStaleTime() < time::steady_clock::now())
     {
-      NFD_LOG_DEBUG("violates mustBeFresh");
+      NFD_LOG_TRACE("violates mustBeFresh");
       return false;
     }
 
@@ -621,7 +621,7 @@
         {
           if (interest.getExclude().isExcluded(lastComponent))
             {
-              NFD_LOG_DEBUG("violates exclusion");
+              NFD_LOG_TRACE("violates exclusion");
               return false;
             }
         }
@@ -636,15 +636,14 @@
             {
               if (interest.getExclude().isExcluded(nextComponent))
                 {
-                  NFD_LOG_DEBUG("violates exclusion");
+                  NFD_LOG_TRACE("violates exclusion");
                   return false;
                 }
             }
         }
     }
 
-
-  NFD_LOG_DEBUG("complies!");
+  NFD_LOG_TRACE("complies");
   return true;
 }
 
@@ -659,7 +658,7 @@
       const ndn::name::Component& last = interest.getName().get(-1);
       if (last.value_size() == ndn::crypto::SHA256_DIGEST_SIZE)
         {
-          NFD_LOG_DEBUG("digest recognized");
+          NFD_LOG_TRACE("digest recognized");
           return true;
         }
     }
@@ -670,8 +669,8 @@
 void
 Cs::erase(const Name& exactName)
 {
-  NFD_LOG_INFO("insert() " << exactName);
-  NFD_LOG_DEBUG("SkipList size " << size());
+  NFD_LOG_TRACE("insert() " << exactName << ", "
+                << "skipList size " << size());
 
   bool isIterated = false;
   SkipListLayer::iterator updateTable[SKIPLIST_MAX_LAYERS];
@@ -734,13 +733,13 @@
   bool isNameIdentical = false;
   if (!isCsEmpty && isInBoundaries)
     {
-      NFD_LOG_DEBUG("Identical? " << (*head)->getName());
+      NFD_LOG_TRACE("Identical? " << (*head)->getName());
       isNameIdentical = (*head)->getName() == exactName;
     }
 
   if (isNameIdentical)
     {
-      NFD_LOG_DEBUG("Found target " << (*head)->getName());
+      NFD_LOG_TRACE("Found target " << (*head)->getName());
       eraseFromSkipList(*head);
     }
 
@@ -750,14 +749,14 @@
 void
 Cs::printSkipList() const
 {
-  NFD_LOG_INFO("print()");
+  NFD_LOG_TRACE("print()");
   //start from the upper layer towards bottom
   int layer = m_skipList.size() - 1;
   for (SkipList::const_reverse_iterator rit = m_skipList.rbegin(); rit != m_skipList.rend(); ++rit)
     {
       for (SkipListLayer::iterator it = (*rit)->begin(); it != (*rit)->end(); ++it)
         {
-          NFD_LOG_DEBUG("Layer " << layer << " " << (*it)->getName());
+          NFD_LOG_TRACE("Layer " << layer << " " << (*it)->getName());
         }
       layer--;
     }
diff --git a/daemon/table/name-tree.cpp b/daemon/table/name-tree.cpp
index 1d2e211..b71c970 100644
--- a/daemon/table/name-tree.cpp
+++ b/daemon/table/name-tree.cpp
@@ -65,12 +65,12 @@
 std::pair<shared_ptr<name_tree::Entry>, bool>
 NameTree::insert(const Name& prefix)
 {
-  NFD_LOG_DEBUG("insert " << prefix);
+  NFD_LOG_TRACE("insert " << prefix);
 
   uint32_t hashValue = name_tree::hashName(prefix);
   uint32_t loc = hashValue % m_nBuckets;
 
-  NFD_LOG_DEBUG("Name " << prefix << " hash value = " << hashValue << "  location = " << loc);
+  NFD_LOG_TRACE("Name " << prefix << " hash value = " << hashValue << "  location = " << loc);
 
   // Check if this Name has been stored
   name_tree::Node* node = m_buckets[loc];
@@ -88,7 +88,7 @@
       nodePrev = node;
     }
 
-  NFD_LOG_DEBUG("Did not find " << prefix << ", need to insert it to the table");
+  NFD_LOG_TRACE("Did not find " << prefix << ", need to insert it to the table");
 
   // If no bucket is empty occupied, we need to create a new node, and it is
   // linked from nodePrev
@@ -117,7 +117,7 @@
 shared_ptr<name_tree::Entry>
 NameTree::lookup(const Name& prefix)
 {
-  NFD_LOG_DEBUG("lookup " << prefix);
+  NFD_LOG_TRACE("lookup " << prefix);
 
   shared_ptr<name_tree::Entry> entry;
   shared_ptr<name_tree::Entry> parent;
@@ -155,12 +155,12 @@
 shared_ptr<name_tree::Entry>
 NameTree::findExactMatch(const Name& prefix) const
 {
-  NFD_LOG_DEBUG("findExactMatch " << prefix);
+  NFD_LOG_TRACE("findExactMatch " << prefix);
 
   uint32_t hashValue = name_tree::hashName(prefix);
   uint32_t loc = hashValue % m_nBuckets;
 
-  NFD_LOG_DEBUG("Name " << prefix << " hash value = " << hashValue <<
+  NFD_LOG_TRACE("Name " << prefix << " hash value = " << hashValue <<
                 "  location = " << loc);
 
   shared_ptr<name_tree::Entry> entry;
@@ -189,7 +189,7 @@
 shared_ptr<name_tree::Entry>
 NameTree::findLongestPrefixMatch(const Name& prefix, const name_tree::EntrySelector& entrySelector) const
 {
-  NFD_LOG_DEBUG("findLongestPrefixMatch " << prefix);
+  NFD_LOG_TRACE("findLongestPrefixMatch " << prefix);
 
   shared_ptr<name_tree::Entry> entry;
 
@@ -222,7 +222,7 @@
 {
   BOOST_ASSERT(static_cast<bool>(entry));
 
-  NFD_LOG_DEBUG("eraseEntryIfEmpty " << entry->getPrefix());
+  NFD_LOG_TRACE("eraseEntryIfEmpty " << entry->getPrefix());
 
   // first check if this Entry can be erased
   if (entry->isEmpty())
@@ -291,7 +291,7 @@
 NameTree::const_iterator
 NameTree::fullEnumerate(const name_tree::EntrySelector& entrySelector) const
 {
-  NFD_LOG_DEBUG("fullEnumerate");
+  NFD_LOG_TRACE("fullEnumerate");
 
   // find the first eligible entry
   for (size_t i = 0; i < m_nBuckets; i++)
@@ -347,7 +347,7 @@
 NameTree::findAllMatches(const Name& prefix,
                          const name_tree::EntrySelector& entrySelector) const
 {
-  NFD_LOG_DEBUG("NameTree::findAllMatches" << prefix);
+  NFD_LOG_TRACE("NameTree::findAllMatches" << prefix);
 
   // As we are using Name Prefix Hash Table, and the current LPM() is
   // implemented as starting from full name, and reduce the number of
@@ -370,7 +370,7 @@
 void
 NameTree::resize(size_t newNBuckets)
 {
-  NFD_LOG_DEBUG("resize");
+  NFD_LOG_TRACE("resize");
 
   name_tree::Node** newBuckets = new name_tree::Node*[newNBuckets];
   size_t count = 0;
@@ -424,7 +424,7 @@
 void
 NameTree::dump(std::ostream& output) const
 {
-  NFD_LOG_DEBUG("dump()");
+  NFD_LOG_TRACE("dump()");
 
   name_tree::Node* node = 0;
   shared_ptr<name_tree::Entry> entry;
@@ -493,7 +493,7 @@
 NameTree::const_iterator
 NameTree::const_iterator::operator++()
 {
-  NFD_LOG_DEBUG("const_iterator::operator++()");
+  NFD_LOG_TRACE("const_iterator::operator++()");
 
   BOOST_ASSERT(m_entry != m_nameTree.m_end);
 
diff --git a/daemon/table/strategy-choice-entry.cpp b/daemon/table/strategy-choice-entry.cpp
index 9d3f218..7933f33 100644
--- a/daemon/table/strategy-choice-entry.cpp
+++ b/daemon/table/strategy-choice-entry.cpp
@@ -5,6 +5,10 @@
  */
 
 #include "strategy-choice-entry.hpp"
+#include "core/logger.hpp"
+#include "fw/strategy.hpp"
+
+NFD_LOG_INIT("StrategyChoiceEntry");
 
 namespace nfd {
 namespace strategy_choice {
@@ -19,6 +23,8 @@
 {
   BOOST_ASSERT(static_cast<bool>(strategy));
   m_strategy = strategy;
+
+  NFD_LOG_INFO("Set strategy " << strategy->getName() << " for " << m_prefix << " prefix");
 }
 
 } // namespace strategy_choice
diff --git a/daemon/table/strategy-choice.cpp b/daemon/table/strategy-choice.cpp
index ee63d04..11bf120 100644
--- a/daemon/table/strategy-choice.cpp
+++ b/daemon/table/strategy-choice.cpp
@@ -53,12 +53,12 @@
 
   if (static_cast<bool>(entry)) {
     if (entry->getStrategy().getName() == strategyName) {
-      NFD_LOG_INFO("insert(" << prefix << "," << strategyName << ") not changing");
+      NFD_LOG_TRACE("insert(" << prefix << "," << strategyName << ") not changing");
       return true;
     }
     oldStrategy = entry->getStrategy().shared_from_this();
-    NFD_LOG_INFO("insert(" << prefix << "," << strategyName << ") "
-                 "changing from " << oldStrategy->getName());
+    NFD_LOG_TRACE("insert(" << prefix << "," << strategyName << ") "
+                  "changing from " << oldStrategy->getName());
   }
 
   shared_ptr<Strategy> strategy = this->getStrategy(strategyName);
@@ -72,7 +72,7 @@
     entry = make_shared<Entry>(prefix);
     nameTreeEntry->setStrategyChoiceEntry(entry);
     ++m_nItems;
-    NFD_LOG_INFO("insert(" << prefix << "," << strategyName << ") new entry");
+    NFD_LOG_TRACE("insert(" << prefix << "," << strategyName << ") new entry");
   }
 
   this->changeStrategy(entry, oldStrategy, strategy);
@@ -184,7 +184,7 @@
   shared_ptr<Entry> entry = make_shared<Entry>(Name());
   nameTreeEntry->setStrategyChoiceEntry(entry);
   ++m_nItems;
-  NFD_LOG_INFO("setDefaultStrategy(" << strategy->getName() << ") new entry");
+  NFD_LOG_INFO("Set default strategy " << strategy->getName());
 
   entry->setStrategy(strategy);
 }
