diff --git a/src/adjacency-list.cpp b/src/adjacency-list.cpp
index 48e35cf..17f6537 100644
--- a/src/adjacency-list.cpp
+++ b/src/adjacency-list.cpp
@@ -4,10 +4,12 @@
 #include "adjacency-list.hpp"
 #include "adjacent.hpp"
 #include "nlsr.hpp"
-
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("AdjacencyList");
+
 using namespace std;
 
 AdjacencyList::AdjacencyList()
@@ -210,6 +212,16 @@
   return it;
 }
 
+void
+AdjacencyList::writeLog()
+{
+  _LOG_DEBUG("-------Adjacency List--------");
+  for (std::list<Adjacent>::iterator it = m_adjList.begin();
+       it != m_adjList.end(); it++) {
+    (*it).writeLog();
+  }
+}
+
 // used for debugging purpose
 void
 AdjacencyList::print()
diff --git a/src/adjacency-list.hpp b/src/adjacency-list.hpp
index 95600cc..a367122 100644
--- a/src/adjacency-list.hpp
+++ b/src/adjacency-list.hpp
@@ -79,6 +79,9 @@
   void
   print();
 
+  void
+  writeLog();
+
 private:
   std::list<Adjacent>::iterator
   find(const ndn::Name& adjName);
diff --git a/src/adjacent.cpp b/src/adjacent.cpp
index f27c4b8..35f9790 100644
--- a/src/adjacent.cpp
+++ b/src/adjacent.cpp
@@ -5,9 +5,12 @@
 
 
 #include "adjacent.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("Adjacent");
+
 using namespace std;
 
 const float Adjacent::DEFAULT_LINK_COST = 10.0;
@@ -55,6 +58,16 @@
   return m_name == adjacencyName;
 }
 
+void
+Adjacent::writeLog()
+{
+  _LOG_DEBUG("Adjacent : " << m_name);
+  _LOG_DEBUG("Connecting FaceUri: " << m_connectingFaceUri);
+  _LOG_DEBUG("Link Cost: " << m_linkCost);
+  _LOG_DEBUG("Status: " << m_status);
+  _LOG_DEBUG("Interest Timed out: " << m_interestTimedOutNo);
+}
+
 std::ostream&
 operator<<(std::ostream& os, const Adjacent& adj)
 {
diff --git a/src/adjacent.hpp b/src/adjacent.hpp
index cbfb0fa..5b14394 100644
--- a/src/adjacent.hpp
+++ b/src/adjacent.hpp
@@ -89,6 +89,9 @@
   bool
   compare(const ndn::Name& adjacencyName);
 
+  void
+  writeLog();
+
 public:
   static const float DEFAULT_LINK_COST;
 
diff --git a/src/communication/sync-logic-handler.cpp b/src/communication/sync-logic-handler.cpp
index 85b1da0..f4a42a2 100644
--- a/src/communication/sync-logic-handler.cpp
+++ b/src/communication/sync-logic-handler.cpp
@@ -2,16 +2,19 @@
 #include "sync-logic-handler.hpp"
 #include "utility/name-helper.hpp"
 #include "lsa.hpp"
-
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("SyncLogicHandler");
+
 using namespace ndn;
 using namespace std;
 
 void
 SyncLogicHandler::createSyncSocket(Nlsr& pnlsr)
 {
+  _LOG_DEBUG("Creating Sync socket. Sync Prefix: " << m_syncPrefix);
   std::cout << "Creating Sync socket ......" << std::endl;
   std::cout << "Sync prefix: " << m_syncPrefix << std::endl;
   m_syncSocket = ndn::make_shared<Sync::SyncSocket>(m_syncPrefix, m_validator,
@@ -26,9 +29,11 @@
 SyncLogicHandler::nsyncUpdateCallBack(const vector<Sync::MissingDataInfo>& v,
                                       Sync::SyncSocket* socket, Nlsr& pnlsr)
 {
+  _LOG_DEBUG("nsyncUpdateCallBack called ....");
   std::cout << "nsyncUpdateCallBack called ...." << std::endl;
   int32_t n = v.size();
   for (int32_t i = 0; i < n; i++){
+    _LOG_DEBUG("Data Name: " << v[i].prefix << " Seq: " << v[i].high.getSeq());
     std::cout << "Data Name: " << v[i].prefix << " Seq: " << v[i].high.getSeq() <<
               endl;
     processUpdateFromSync(v[i].prefix, v[i].high.getSeq(), pnlsr);
@@ -38,6 +43,7 @@
 void
 SyncLogicHandler::nsyncRemoveCallBack(const string& prefix, Nlsr& pnlsr)
 {
+  _LOG_DEBUG("nsyncRemoveCallBack called ....");
   std::cout << "nsyncRemoveCallBack called ...." << std::endl;
 }
 
@@ -67,10 +73,11 @@
   if (routerName != pnlsr.getConfParameter().getRouterPrefix()) {
     SequencingManager sm(seqNo);
     std::cout << sm;
-    std::cout << "Router Name: " << routerName << endl;
+    //std::cout << "Router Name: " << routerName << endl;
     try {
       if (pnlsr.getLsdb().isNameLsaNew(rName.append("name"), sm.getNameLsaSeq())) {
         std::cout << "Updated Name LSA. Need to fetch it" << std::endl;
+        _LOG_DEBUG("Updated Name LSA. Need to fetch it");
         ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix());
         interestName.append(routerName);
         interestName.append("name");
@@ -81,6 +88,7 @@
       if (pnlsr.getLsdb().isAdjLsaNew(rName.append("adjacency"),
                                       sm.getAdjLsaSeq())) {
         std::cout << "Updated Adj LSA. Need to fetch it" << std::endl;
+        _LOG_DEBUG("Updated Adj LSA. Need to fetch it");
         ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix());
         interestName.append(routerName);
         interestName.append("adjacency");
@@ -91,6 +99,7 @@
       if (pnlsr.getLsdb().isCoordinateLsaNew(rName.append("coordinate"),
                                              sm.getCorLsaSeq())) {
         std::cout << "Updated Cor LSA. Need to fetch it" << std::endl;
+        _LOG_DEBUG("Updated Cor LSA. Need to fetch it");
         ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix());
         interestName.append(routerName);
         interestName.append("coordinate");
@@ -121,6 +130,7 @@
   std::cout << "Publishing Sync Update ......" << std::endl;
   std::cout << "Update in prefix: " << updatePrefix << std::endl;
   std::cout << "Seq No: " << seqNo << std::endl;
+  _LOG_DEBUG("Publishing Sync Update. Prefix: " << updatePrefix << "Seq no: " << seqNo);
   ndn::Name updateName(updatePrefix);
   string data("NoData");
   m_syncSocket->publishData(updateName.toUri(), 0, data.c_str(), data.size(),
diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
index 7726869..b42bf80 100644
--- a/src/conf-file-processor.cpp
+++ b/src/conf-file-processor.cpp
@@ -3,6 +3,7 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/property_tree/info_parser.hpp>
 #include <boost/property_tree/ptree.hpp>
+#include <boost/filesystem.hpp>
 
 #include <ndn-cxx/name.hpp>
 
@@ -163,6 +164,72 @@
     return false;
   }
   
+  try {
+    std::string logDir = SectionAttributeTree.get<string>("log-dir");
+    if (boost::filesystem::exists(logDir)) {
+      if (boost::filesystem::is_directory(logDir)) {
+        std::string testFileName=logDir+"/test.log";
+        ofstream testOutFile;
+        testOutFile.open(testFileName.c_str());
+        if (testOutFile.is_open() && testOutFile.good()) {
+          m_nlsr.getConfParameter().setLogDir(logDir);
+        }
+        else {
+          std::cerr << "User does not have read and write permission on the directory";
+          std::cerr << std::endl;
+          return false;
+        }
+        testOutFile.close();
+        remove(testFileName.c_str());
+      }
+      else {
+        std::cerr << "Provided path is not a directory" << std::endl;
+        return false;
+      }
+    }
+    else {
+      std::cerr << "Log directory provided does not exists" << std::endl;
+      return false;
+    }
+  }
+  catch (const std::exception& ex) {
+    std::cerr << "You must configure log directory" << std::endl;
+    std::cerr << ex.what() << std::endl;
+    return false;
+  }
+  try {
+    std::string seqDir = SectionAttributeTree.get<string>("seq-dir");
+    if (boost::filesystem::exists(seqDir)) {
+      if (boost::filesystem::is_directory(seqDir)) {
+        std::string testFileName=seqDir+"/test.seq";
+        ofstream testOutFile;
+        testOutFile.open(testFileName.c_str());
+        if (testOutFile.is_open() && testOutFile.good()) {
+          m_nlsr.getConfParameter().setSeqFileDir(seqDir);
+        }
+        else {
+          std::cerr << "User does not have read and write permission on the directory";
+          std::cerr << std::endl;
+          return false;
+        }
+        testOutFile.close();
+        remove(testFileName.c_str());
+      }
+      else {
+        std::cerr << "Provided path is not a directory" << std::endl;
+        return false;
+      }
+    }
+    else {
+      std::cerr << "Seq directory provided does not exists" << std::endl;
+      return false;
+    }
+  }
+  catch (const std::exception& ex) {
+    std::cerr << "You must configure sequence directory" << std::endl;
+    std::cerr << ex.what() << std::endl;
+    return false;
+  }
   return true;
 }
 
@@ -233,7 +300,7 @@
           m_nlsr.getAdjacencyList().insert(adj);
         }
         else {
-          cerr << " Wrong command format ! [name /nbr/name/ \n face-uri /uri\n]";
+          std::cerr << " Wrong command format ! [name /nbr/name/ \n face-uri /uri\n]";
           std::cerr << " or bad URI format" << std::endl;
         }
       }
@@ -336,8 +403,7 @@
          m_nlsr.getNamePrefixList().insert(namePrefix);
        }
        else {
-         std::cerr << " Wrong command format ! [prefix /name/prefix] or bad URI";
-         std::cerr << std::endl;
+         std::cerr << " Wrong command format ! [prefix /name/prefix] or bad URI" << std::endl;
          return false;
        }
      }
diff --git a/src/conf-parameter.cpp b/src/conf-parameter.cpp
new file mode 100644
index 0000000..7160a69
--- /dev/null
+++ b/src/conf-parameter.cpp
@@ -0,0 +1,29 @@
+#include "conf-parameter.hpp"
+#include "logger.hpp"
+
+namespace nlsr {
+
+INIT_LOGGER("ConfParameter");
+
+void
+ConfParameter::writeLog()
+{
+  _LOG_DEBUG("Router Name: " << m_routerName);
+  _LOG_DEBUG("Site Name: " << m_siteName);
+  _LOG_DEBUG("Network: " << m_network);
+  _LOG_DEBUG("Router Prefix: " << m_routerPrefix);
+  _LOG_DEBUG("ChronoSync sync Prifex: " << m_chronosyncPrefix);
+  _LOG_DEBUG("ChronoSync LSA prefix: " << m_lsaPrefix);
+  _LOG_DEBUG("Interest Retry number: " << m_interestRetryNumber);
+  _LOG_DEBUG("Interest Resend second: " << m_interestResendTime);
+  _LOG_DEBUG("Info Interest Interval: " << m_infoInterestInterval);
+  _LOG_DEBUG("LSA refresh time: " << m_lsaRefreshTime);
+  _LOG_DEBUG("Max Faces Per Prefix: " << m_maxFacesPerPrefix);
+  _LOG_DEBUG("Hyperbolic ROuting: " << m_hyperbolicState);
+  _LOG_DEBUG("Hyp R: " << m_corR);
+  _LOG_DEBUG("Hyp theta: " << m_corTheta);
+  _LOG_DEBUG("Log Directory: " << m_logDir);
+  _LOG_DEBUG("Seq Directory: " << m_seqFileDir);
+}
+
+} // namespace nlsr
diff --git a/src/conf-parameter.hpp b/src/conf-parameter.hpp
index 6f1dc86..0945a65 100644
--- a/src/conf-parameter.hpp
+++ b/src/conf-parameter.hpp
@@ -6,6 +6,8 @@
 #include <ndn-cxx/common.hpp>
 #include <ndn-cxx/face.hpp>
 
+#include "logger.hpp"
+
 namespace nlsr {
 
 enum {
@@ -256,6 +258,18 @@
   }
 
   void
+  setLogDir(const std::string& logDir)
+  {
+    m_logDir = logDir;
+  }
+
+  const std::string&
+  getLogDir()
+  {
+    return m_logDir;
+  }
+
+  void
   setSeqFileDir(const std::string& ssfd)
   {
     m_seqFileDir = ssfd;
@@ -267,6 +281,8 @@
     return m_seqFileDir;
   }
 
+  void
+  writeLog();
 
 private:
   ndn::Name m_routerName;
@@ -295,6 +311,7 @@
 
   int32_t m_maxFacesPerPrefix;
   
+  std::string m_logDir;
   std::string m_seqFileDir;
 
 };
@@ -302,20 +319,22 @@
 inline std::ostream&
 operator<<(std::ostream& os, ConfParameter& cfp)
 {
-  os  << "Router Name: " << cfp.getRouterName() << std::endl;
-  os  << "Site Name: " << cfp.getSiteName() << std::endl;
-  os  << "Network: " << cfp.getNetwork() << std::endl;
-  os  << "Router Prefix: " << cfp.getRouterPrefix() << std::endl;
-  os  << "ChronoSync sync Prifex: " << cfp.getChronosyncPrefix() << std::endl;
-  os  << "ChronoSync LSA prefix: " << cfp.getLsaPrefix() << std::endl;
-  os  << "Interest Retry number: " << cfp.getInterestRetryNumber() << std::endl;
-  os  << "Interest Resend second: " << cfp.getInterestResendTime() << std::endl;
-  os  << "Info Interest Interval: " << cfp.getInfoInterestInterval() << std::endl;
-  os  << "LSA refresh time: " << cfp.getLsaRefreshTime() << std::endl;
-  os  << "Max Faces Per Prefix: " << cfp.getMaxFacesPerPrefix() << std::endl;
-  os  << "Hyperbolic ROuting: " << cfp.getHyperbolicState() << std::endl;
-  os  << "Hyp R: " << cfp.getCorR() << std::endl;
-  os  << "Hyp theta: " << cfp.getCorTheta() << std::endl;
+  os << "Router Name: " << cfp.getRouterName() << std::endl;
+  os << "Site Name: " << cfp.getSiteName() << std::endl;
+  os << "Network: " << cfp.getNetwork() << std::endl;
+  os << "Router Prefix: " << cfp.getRouterPrefix() << std::endl;
+  os << "ChronoSync sync Prifex: " << cfp.getChronosyncPrefix() << std::endl;
+  os << "ChronoSync LSA prefix: " << cfp.getLsaPrefix() << std::endl;
+  os << "Interest Retry number: " << cfp.getInterestRetryNumber() << std::endl;
+  os << "Interest Resend second: " << cfp.getInterestResendTime() << std::endl;
+  os << "Info Interest Interval: " << cfp.getInfoInterestInterval() << std::endl;
+  os << "LSA refresh time: " << cfp.getLsaRefreshTime() << std::endl;
+  os << "Max Faces Per Prefix: " << cfp.getMaxFacesPerPrefix() << std::endl;
+  os << "Hyperbolic ROuting: " << cfp.getHyperbolicState() << std::endl;
+  os << "Hyp R: " << cfp.getCorR() << std::endl;
+  os << "Hyp theta: " << cfp.getCorTheta() << std::endl;
+  os << "Log Directory: " << cfp.getLogDir() << std::endl;
+  os << "Seq Directory: " << cfp.getSeqFileDir() << std::endl;
   return  os;
 }
 
diff --git a/src/hello-protocol.cpp b/src/hello-protocol.cpp
index 2dc106c..217f7df 100644
--- a/src/hello-protocol.cpp
+++ b/src/hello-protocol.cpp
@@ -2,15 +2,19 @@
 #include "lsdb.hpp"
 #include "hello-protocol.hpp"
 #include "utility/name-helper.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("HelloProtocol");
+
 const std::string HelloProtocol::INFO_COMPONENT="info";
 
 void
 HelloProtocol::expressInterest(const ndn::Name& interestName, uint32_t seconds)
 {
   std::cout << "Expressing Interest :" << interestName << std::endl;
+  _LOG_DEBUG("Expressing Interest :" << interestName);
   ndn::Interest i(interestName);
   i.setInterestLifetime(ndn::time::seconds(seconds));
   i.setMustBeFresh(true);
@@ -51,12 +55,14 @@
 {
   const ndn::Name interestName = interest.getName();
   std::cout << "Interest Received for Name: " << interestName << std::endl;
+  _LOG_DEBUG("Interest Received for Name: " << interestName);
   if (interestName.get(-2).toUri() != INFO_COMPONENT) {
     return;
   }
   ndn::Name neighbor;
   neighbor.wireDecode(interestName.get(-1).blockFromValue());
   std::cout << "Neighbor: " << neighbor << std::endl;
+  _LOG_DEBUG("Neighbor: " << neighbor);
   if (m_nlsr.getAdjacencyList().isNeighbor(neighbor)) {
     ndn::Data data(ndn::Name(interest.getName()).appendVersion());
     data.setFreshnessPeriod(ndn::time::seconds(10)); // 10 sec
@@ -64,6 +70,7 @@
                     INFO_COMPONENT.size());
     m_keyChain.sign(data);
     std::cout << ">> D: " << data << std::endl;
+    _LOG_DEBUG("Sending out data for name: " << data.getName());
     m_nlsr.getNlsrFace().put(data);
     int status = m_nlsr.getAdjacencyList().getStatusOfNeighbor(neighbor);
     if (status == 0) {
@@ -81,11 +88,13 @@
 {
   const ndn::Name interestName(interest.getName());
   std::cout << "Interest timed out for Name: " << interestName << std::endl;
+  _LOG_DEBUG("Interest timed out for Name: " << interestName);
   if (interestName.get(-2).toUri() != INFO_COMPONENT) {
     return;
   }
   ndn::Name neighbor = interestName.getPrefix(-2);
   std::cout << "Neighbor: " << neighbor << std::endl;
+  _LOG_DEBUG("Neighbor: " << neighbor);
   m_nlsr.getAdjacencyList().incrementTimedOutInterestCount(neighbor);
   int status = m_nlsr.getAdjacencyList().getStatusOfNeighbor(neighbor);
   uint32_t infoIntTimedOutCount =
@@ -93,6 +102,8 @@
   std::cout << "Neighbor: " << neighbor << std::endl;
   std::cout << "Status: " << status << std::endl;
   std::cout << "Info Interest Timed out: " << infoIntTimedOutCount << std::endl;
+  _LOG_DEBUG("Status: " << status);
+  _LOG_DEBUG("Info Interest Timed out: " << infoIntTimedOutCount);
   if ((infoIntTimedOutCount < m_nlsr.getConfParameter().getInterestRetryNumber())) {
     ndn::Name interestName(neighbor);
     interestName.append(INFO_COMPONENT);
@@ -105,6 +116,7 @@
     m_nlsr.getAdjacencyList().setStatusOfNeighbor(neighbor, 0);
     m_nlsr.incrementAdjBuildCount();
     if (m_nlsr.getIsBuildAdjLsaSheduled() == false) {
+      _LOG_DEBUG("Scheduling scheduledAdjLsaBuild");
       m_nlsr.setIsBuildAdjLsaSheduled(true);
       // event here
       m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
@@ -121,6 +133,7 @@
 {
   ndn::Name dataName = data.getName();
   std::cout << "Data received for name: " << dataName << std::endl;
+  _LOG_DEBUG("Data received for name: " << dataName);
   if (dataName.get(-3).toUri() == INFO_COMPONENT) {
     ndn::Name neighbor = dataName.getPrefix(-3);
     int oldStatus = m_nlsr.getAdjacencyList().getStatusOfNeighbor(neighbor);
@@ -142,12 +155,14 @@
     std::cout << "Neighbor : " << neighbor << std::endl;
     std::cout << "Status: " << newStatus << std::endl;
     std::cout << "Info Interest Timed out: " << infoIntTimedOutCount << std::endl;
+    _LOG_DEBUG("Old Status: " << oldStatus << " New Status: " << newStatus);
     //debugging purpose end
     // change in Adjacency list
     if ((oldStatus - newStatus) != 0) {
       m_nlsr.incrementAdjBuildCount();
       /* Need to schedule event for Adjacency LSA building */
       if (m_nlsr.getIsBuildAdjLsaSheduled() == false) {
+        _LOG_DEBUG("Scheduling scheduledAdjLsaBuild");
         m_nlsr.setIsBuildAdjLsaSheduled(true);
         // event here
         m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
diff --git a/src/logger.cpp b/src/logger.cpp
new file mode 100644
index 0000000..c4a2f11
--- /dev/null
+++ b/src/logger.cpp
@@ -0,0 +1,28 @@
+#include <log4cxx/logger.h>
+#include <log4cxx/basicconfigurator.h>
+#include <log4cxx/patternlayout.h>
+#include <log4cxx/level.h>
+#include <log4cxx/helpers/exception.h>
+#include <log4cxx/rollingfileappender.h>
+
+#include "logger.hpp"
+
+void
+INIT_LOGGERS(const std::string& logDir)
+{
+  static bool configured = false;
+  if (configured) return;
+
+  log4cxx::PatternLayoutPtr
+           layout(new log4cxx::PatternLayout("%date{yyyyMMddHHmmssSSS} %c %L: %m%n"));
+  log4cxx::RollingFileAppender* rollingFileAppender =
+           new log4cxx::RollingFileAppender(layout, logDir+"/nlsr.log", true);
+  rollingFileAppender->setMaxFileSize("10MB");
+  rollingFileAppender->setMaxBackupIndex(10);
+  log4cxx::helpers::Pool p;
+  rollingFileAppender->activateOptions(p);
+  log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(rollingFileAppender));
+  log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getDebug());
+
+  configured = true;
+}
diff --git a/src/logger.hpp b/src/logger.hpp
new file mode 100644
index 0000000..241b732
--- /dev/null
+++ b/src/logger.hpp
@@ -0,0 +1,19 @@
+#ifndef NLSR_LOGGER_HPP
+#define NLSR_LOGGER_HPP
+
+#include <log4cxx/logger.h>
+
+
+#define INIT_LOGGER(name) \
+  static log4cxx::LoggerPtr staticModuleLogger = log4cxx::Logger::getLogger(name)
+
+#define _LOG_DEBUG(x) \
+  LOG4CXX_DEBUG(staticModuleLogger,x)
+
+#define _LOG_INFO(x) \
+  LOG4CXX_INFO(staticModuleLogger, x)
+
+void
+INIT_LOGGERS(const std::string& logDir);
+
+#endif // NLSR_LOGGER_HPP
diff --git a/src/lsa.cpp b/src/lsa.cpp
index 14d033a..dbb6ee5 100644
--- a/src/lsa.cpp
+++ b/src/lsa.cpp
@@ -11,10 +11,13 @@
 #include "lsa.hpp"
 #include "name-prefix-list.hpp"
 #include "adjacent.hpp"
+#include "logger.hpp"
 
 
 namespace nlsr {
 
+INIT_LOGGER("Lsa");
+
 using namespace std;
 
 const ndn::Name
@@ -87,6 +90,18 @@
 void
 NameLsa::writeLog()
 {
+  _LOG_DEBUG("Name Lsa: ");
+  _LOG_DEBUG("  Origination Router: " << m_origRouter);
+  _LOG_DEBUG("  Ls Type: " << m_lsType);
+  _LOG_DEBUG("  Ls Seq No: " << m_lsSeqNo);
+  _LOG_DEBUG("  Ls Lifetime: " << m_lifeTime);
+  _LOG_DEBUG("  Names: ");
+  int i = 1;
+  std::list<ndn::Name> nl = m_npl.getNameList();
+  for (std::list<ndn::Name>::iterator it = nl.begin(); it != nl.end(); it++)
+  {
+    _LOG_DEBUG("    Name " << i << ": " << (*it));
+  }
 }
 
 std::ostream&
@@ -177,6 +192,18 @@
   return true;
 }
 
+void
+CoordinateLsa::writeLog()
+{
+  _LOG_DEBUG("Cor Lsa: ");
+  _LOG_DEBUG("  Origination Router: " << m_origRouter);
+  _LOG_DEBUG("  Ls Type: " << m_lsType);
+  _LOG_DEBUG("  Ls Seq No: " << m_lsSeqNo);
+  _LOG_DEBUG("  Ls Lifetime: " << m_lifeTime);
+  _LOG_DEBUG("    Hyperbolic Radius: " << m_corRad);
+  _LOG_DEBUG("    Hyperbolic Theta: " << m_corRad);
+}
+
 std::ostream&
 operator<<(std::ostream& os, const CoordinateLsa& cLsa)
 {
@@ -298,7 +325,25 @@
   }
 }
 
-
+void
+AdjLsa::writeLog()
+{
+  _LOG_DEBUG("Adj Lsa: ");
+  _LOG_DEBUG("  Origination Router: " << m_origRouter);
+  _LOG_DEBUG("  Ls Type: " << m_lsType);
+  _LOG_DEBUG("  Ls Seq No: " << m_lsSeqNo);
+  _LOG_DEBUG("  Ls Lifetime: " << m_lifeTime);
+  _LOG_DEBUG("  Adjacents: ");
+  int i = 1;
+  std::list<Adjacent> al = m_adl.getAdjList();
+  for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+  {
+    _LOG_DEBUG("    Adjacent " << i << ": ");;
+    _LOG_DEBUG("      Adjacent Name: " << (*it).getName());
+    _LOG_DEBUG("      Connecting FaceUri: " << (*it).getConnectingFaceUri());
+    _LOG_DEBUG("      Link Cost: " << (*it).getLinkCost());
+  }
+}
 
 std::ostream&
 operator<<(std::ostream& os, AdjLsa& aLsa)
diff --git a/src/lsa.hpp b/src/lsa.hpp
index 041e32c..bc43772 100644
--- a/src/lsa.hpp
+++ b/src/lsa.hpp
@@ -190,6 +190,9 @@
   void
   removeNptEntries(Nlsr& pnlsr);
 
+  void
+  writeLog();
+
 private:
   uint32_t m_noLink;
   AdjacencyList m_adl;
@@ -249,6 +252,9 @@
   bool
   isEqualContent(const CoordinateLsa& clsa);
 
+  void
+  writeLog();
+
 private:
   double m_corRad;
   double m_corTheta;
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
index 0b34867..f99482d 100644
--- a/src/lsdb.cpp
+++ b/src/lsdb.cpp
@@ -5,9 +5,12 @@
 #include "nlsr.hpp"
 #include "conf-parameter.hpp"
 #include "utility/name-helper.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("Lsdb");
+
 using namespace std;
 
 void
@@ -77,7 +80,9 @@
   NameLsa* chkNameLsa = findNameLsa(nlsa.getKey());
   if (chkNameLsa == 0) {
     addNameLsa(nlsa);
+    _LOG_DEBUG("New Name LSA. Adding to LSDB");
     nlsa.writeLog();
+
     printNameLsdb();
     if (nlsa.getOrigRouter() != m_nlsr.getConfParameter().getRouterPrefix()) {
       m_nlsr.getNamePrefixTable().addEntry(nlsa.getOrigRouter(),
@@ -99,6 +104,8 @@
   }
   else {
     if (chkNameLsa->getLsSeqNo() < nlsa.getLsSeqNo()) {
+      _LOG_DEBUG("Updated Name LSA. Updating LSDB");
+      _LOG_DEBUG("Old Name LSA ");
       chkNameLsa->writeLog();
       chkNameLsa->setLsSeqNo(nlsa.getLsSeqNo());
       chkNameLsa->setLifeTime(nlsa.getLifeTime());
@@ -141,6 +148,7 @@
       chkNameLsa->setExpiringEventId(scheduleNameLsaExpiration(nlsa.getKey(),
                                                                nlsa.getLsSeqNo(),
                                                                timeToExpire));
+      _LOG_DEBUG("Updated Name LSA");
       chkNameLsa->writeLog();
     }
   }
@@ -168,6 +176,7 @@
                                                  m_nameLsdb.end(),
                                                  ndn::bind(nameLsaCompareByKey, _1, key));
   if (it != m_nameLsdb.end()) {
+    _LOG_DEBUG("Removing Name LSA");
     (*it).writeLog();
     if ((*it).getOrigRouter() !=
         m_nlsr.getConfParameter().getRouterPrefix()) {
@@ -273,6 +282,8 @@
   int timeToExpire = m_lsaRefreshTime;
   CoordinateLsa* chkCorLsa = findCoordinateLsa(clsa.getKey());
   if (chkCorLsa == 0) {
+    _LOG_DEBUG("New Coordinate LSA. Adding to LSDB");
+    clsa.writeLog();
     addCoordinateLsa(clsa);
     //debugging purpose
     printCorLsdb();
@@ -291,6 +302,9 @@
   }
   else {
     if (chkCorLsa->getLsSeqNo() < clsa.getLsSeqNo()) {
+      _LOG_DEBUG("Updated Coordinate LSA. Updating LSDB");
+      _LOG_DEBUG("Old Coordinate LSA");
+      chkCorLsa->writeLog();
       chkCorLsa->setLsSeqNo(clsa.getLsSeqNo());
       chkCorLsa->setLifeTime(clsa.getLifeTime());
       if (!chkCorLsa->isEqualContent(clsa)) {
@@ -307,6 +321,8 @@
       chkCorLsa->setExpiringEventId(scheduleCoordinateLsaExpiration(clsa.getKey(),
                                                                     clsa.getLsSeqNo(),
                                                                     timeToExpire));
+      _LOG_DEBUG("Updated Coordinate LSA");
+      chkCorLsa->writeLog();
     }
   }
   return true;
@@ -334,6 +350,8 @@
                                                        ndn::bind(corLsaCompareByKey,
                                                                  _1, key));
   if (it != m_corLsdb.end()) {
+    _LOG_DEBUG("Removing Coordinate LSA");
+    (*it).writeLog();
     if ((*it).getOrigRouter() !=
         m_nlsr.getConfParameter().getRouterPrefix()) {
       m_nlsr.getNamePrefixTable().removeEntry((*it).getOrigRouter(),
@@ -382,12 +400,14 @@
 void
 Lsdb::scheduledAdjLsaBuild()
 {
-  cout << "scheduledAdjLsaBuild Called" << endl;
-  m_nlsr.setIsBuildAdjLsaSheduled(0);
+  std::cout << "scheduledAdjLsaBuild Called" << endl;
+  _LOG_DEBUG("scheduledAdjLsaBuild Called");
+  m_nlsr.setIsBuildAdjLsaSheduled(false);
   if (m_nlsr.getAdjacencyList().isAdjLsaBuildable(m_nlsr)) {
     int adjBuildCount = m_nlsr.getAdjBuildCount();
     if (adjBuildCount > 0) {
       if (m_nlsr.getAdjacencyList().getNumOfActiveNeighbor() > 0) {
+        _LOG_DEBUG("Building and installing Adj LSA");
         buildAndInstallOwnAdjLsa();
       }
       else {
@@ -400,7 +420,7 @@
     }
   }
   else {
-    m_nlsr.setIsBuildAdjLsaSheduled(1);
+    m_nlsr.setIsBuildAdjLsaSheduled(true);
     int schedulingTime = m_nlsr.getConfParameter().getInterestRetryNumber() *
                          m_nlsr.getConfParameter().getInterestResendTime();
     m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(schedulingTime),
@@ -467,6 +487,8 @@
   int timeToExpire = m_lsaRefreshTime;
   AdjLsa* chkAdjLsa = findAdjLsa(alsa.getKey());
   if (chkAdjLsa == 0) {
+    _LOG_DEBUG("New Adj LSA. Adding to LSDB");
+    alsa.writeLog();
     addAdjLsa(alsa);
     alsa.addNptEntries(m_nlsr);
     m_nlsr.getRoutingTable().scheduleRoutingTableCalculation(m_nlsr);
@@ -478,6 +500,9 @@
   }
   else {
     if (chkAdjLsa->getLsSeqNo() < alsa.getLsSeqNo()) {
+      _LOG_DEBUG("Updated Adj LSA. Updating LSDB");
+      _LOG_DEBUG("Old Adj LSA");
+      chkAdjLsa->writeLog();
       chkAdjLsa->setLsSeqNo(alsa.getLsSeqNo());
       chkAdjLsa->setLifeTime(alsa.getLifeTime());
       if (!chkAdjLsa->isEqualContent(alsa)) {
@@ -492,6 +517,8 @@
       chkAdjLsa->setExpiringEventId(scheduleAdjLsaExpiration(alsa.getKey(),
                                                              alsa.getLsSeqNo(),
                                                              timeToExpire));
+      _LOG_DEBUG("Updated Adj LSA");
+      chkAdjLsa->writeLog();
     }
   }
   return true;
@@ -522,6 +549,8 @@
                                                 m_adjLsdb.end(),
                                                 ndn::bind(adjLsaCompareByKey, _1, key));
   if (it != m_adjLsdb.end()) {
+    _LOG_DEBUG("Removing Adj LSA");
+    (*it).writeLog();
     (*it).removeNptEntries(m_nlsr);
     m_adjLsdb.erase(it);
     return true;
@@ -562,15 +591,19 @@
 void
 Lsdb::exprireOrRefreshNameLsa(const ndn::Name& lsaKey, uint64_t seqNo)
 {
-  cout << "Lsdb::exprireOrRefreshNameLsa Called " << endl;
-  cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  std::cout << "Lsdb::exprireOrRefreshNameLsa Called " << std::endl;
+  std::cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << std::endl;
+  _LOG_DEBUG("Lsdb::exprireOrRefreshNameLsa Called");
+  _LOG_DEBUG("LSA Key : " << lsaKey << " Seq No: " << seqNo);
   NameLsa* chkNameLsa = findNameLsa(lsaKey);
   if (chkNameLsa != 0) {
-    cout << " LSA Exists with seq no: " << chkNameLsa->getLsSeqNo() << endl;
+    std::cout << "LSA Exists with seq no: " << chkNameLsa->getLsSeqNo() << std::endl;
+    _LOG_DEBUG("LSA Exists with seq no: " << chkNameLsa->getLsSeqNo());
     if (chkNameLsa->getLsSeqNo() == seqNo) {
       if (chkNameLsa->getOrigRouter() == m_thisRouterPrefix) {
         chkNameLsa->writeLog();
-        cout << "Own Name LSA, so refreshing name LSA" << endl;
+        std::cout << "Own Name LSA, so refreshing name LSA" << std::endl;
+        _LOG_DEBUG("Own Name LSA, so refreshing name LSA");
         chkNameLsa->setLsSeqNo(chkNameLsa->getLsSeqNo() + 1);
         m_nlsr.getSequencingManager().setNameLsaSeq(chkNameLsa->getLsSeqNo());
         chkNameLsa->writeLog();
@@ -585,7 +618,8 @@
                                                           lsaPrefix);
       }
       else {
-        cout << "Other's Name LSA, so removing form LSDB" << endl;
+        std::cout << "Other's Name LSA, so removing form LSDB" << std::endl;
+        _LOG_DEBUG("Other's Name LSA, so removing form LSDB");
         removeNameLsa(lsaKey);
       }
     }
@@ -597,12 +631,16 @@
 {
   cout << "Lsdb::exprireOrRefreshAdjLsa Called " << endl;
   cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  _LOG_DEBUG("Lsdb::exprireOrRefreshAdjLsa Called");
+  _LOG_DEBUG("LSA Key : " << lsaKey << " Seq No: " << seqNo);
   AdjLsa* chkAdjLsa = findAdjLsa(lsaKey);
   if (chkAdjLsa != 0) {
-    cout << " LSA Exists with seq no: " << chkAdjLsa->getLsSeqNo() << endl;
+    cout << "LSA Exists with seq no: " << chkAdjLsa->getLsSeqNo() << endl;
+    _LOG_DEBUG("LSA Exists with seq no: ");
     if (chkAdjLsa->getLsSeqNo() == seqNo) {
       if (chkAdjLsa->getOrigRouter() == m_thisRouterPrefix) {
         cout << "Own Adj LSA, so refreshing Adj LSA" << endl;
+        _LOG_DEBUG("Own Adj LSA, so refreshing Adj LSA");
         chkAdjLsa->setLsSeqNo(chkAdjLsa->getLsSeqNo() + 1);
         m_nlsr.getSequencingManager().setAdjLsaSeq(chkAdjLsa->getLsSeqNo());
         // schedule refreshing event again
@@ -617,6 +655,7 @@
       }
       else {
         cout << "Other's Adj LSA, so removing form LSDB" << endl;
+        _LOG_DEBUG("Other's Adj LSA, so removing form LSDB");
         removeAdjLsa(lsaKey);
       }
       // schedule Routing table calculaiton
@@ -631,12 +670,16 @@
 {
   cout << "Lsdb::exprireOrRefreshCorLsa Called " << endl;
   cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  _LOG_DEBUG("Lsdb::exprireOrRefreshCorLsa Called ");
+  _LOG_DEBUG("LSA Key : " << lsaKey << " Seq No: " << seqNo);
   CoordinateLsa* chkCorLsa = findCoordinateLsa(lsaKey);
   if (chkCorLsa != 0) {
     cout << " LSA Exists with seq no: " << chkCorLsa->getLsSeqNo() << endl;
+    _LOG_DEBUG("LSA Exists with seq no: " << chkCorLsa->getLsSeqNo());
     if (chkCorLsa->getLsSeqNo() == seqNo) {
       if (chkCorLsa->getOrigRouter() == m_thisRouterPrefix) {
         cout << "Own Cor LSA, so refreshing Cor LSA" << endl;
+        _LOG_DEBUG("Own Cor LSA, so refreshing Cor LSA");
         chkCorLsa->setLsSeqNo(chkCorLsa->getLsSeqNo() + 1);
         m_nlsr.getSequencingManager().setCorLsaSeq(chkCorLsa->getLsSeqNo());
         // schedule refreshing event again
@@ -652,6 +695,7 @@
       }
       else {
         cout << "Other's Cor LSA, so removing form LSDB" << endl;
+        _LOG_DEBUG("Other's Cor LSA, so removing form LSDB");
         removeCoordinateLsa(lsaKey);
       }
       if (m_nlsr.getConfParameter().getHyperbolicState() >= HYPERBOLIC_STATE_ON) {
@@ -666,6 +710,7 @@
 Lsdb::expressInterest(const ndn::Name& interestName, uint32_t interestLifeTime)
 {
   std::cout << "Expressing Interest :" << interestName << std::endl;
+  _LOG_DEBUG("Expressing Interest for LSA(name): " << interestName);
   ndn::Interest interest(interestName);
   interest.setInterestLifetime(ndn::time::seconds(interestLifeTime));
   interest.setMustBeFresh(true);
@@ -681,6 +726,7 @@
 {
   const ndn::Name& intName(interest.getName());
   std::cout << "Interest recevied for LSA: " << intName << std::endl;
+  _LOG_DEBUG("Interest recevied for LSA(name): " << intName);
   string chkString("LSA");
   int32_t lsaPosition = util::getNameComponentPosition(interest.getName(),
                                                        chkString);
@@ -728,12 +774,13 @@
   if (nameLsa != 0) {
     if (nameLsa->getLsSeqNo() >= interestedlsSeqNo) {
       ndn::Data data(ndn::Name(interest.getName()).appendVersion());
+      _LOG_DEBUG("Sending data for LSA(name): " << interest.getName());
       data.setFreshnessPeriod(ndn::time::seconds(10)); // 10 sec
       std::string content = nameLsa->getData();
       data.setContent(reinterpret_cast<const uint8_t*>(content.c_str()),
                       content.size());
       m_keyChain.sign(data);
-      std::cout << ">> D: " << data << std::endl;
+      //std::cout << ">> D: " << data << std::endl;
       m_nlsr.getNlsrFace().put(data);
     }
   }
@@ -748,12 +795,13 @@
   if (adjLsa != 0) {
     if (adjLsa->getLsSeqNo() >= interestedlsSeqNo) {
       ndn::Data data(ndn::Name(interest.getName()).appendVersion());
+      _LOG_DEBUG("Sending data for LSA(name): " << interest.getName());
       data.setFreshnessPeriod(ndn::time::seconds(10)); // 10 sec
       std::string content = adjLsa->getData();
       data.setContent(reinterpret_cast<const uint8_t*>(content.c_str()),
                       content.size());
       m_keyChain.sign(data);
-      std::cout << ">> D: " << data << std::endl;
+      //std::cout << ">> D: " << data << std::endl;
       m_nlsr.getNlsrFace().put(data);
     }
   }
@@ -768,12 +816,13 @@
   if (corLsa != 0) {
     if (corLsa->getLsSeqNo() >= interestedlsSeqNo) {
       ndn::Data data(ndn::Name(interest.getName()).appendVersion());
+      _LOG_DEBUG("Sending data for LSA(name): " << interest.getName());
       data.setFreshnessPeriod(ndn::time::seconds(10)); // 10 sec
       std::string content = corLsa->getData();
       data.setContent(reinterpret_cast<const uint8_t*>(content.c_str()),
                       content.size());
       m_keyChain.sign(data);
-      std::cout << ">> D: " << data << std::endl;
+      //std::cout << ">> D: " << data << std::endl;
       m_nlsr.getNlsrFace().put(data);
     }
   }
@@ -783,7 +832,8 @@
 Lsdb::processContent(const ndn::Interest& interest, const ndn::Data& data)
 {
   const ndn::Name& dataName = data.getName();
-  std::cout << "Data received for name: " << dataName << std::endl;
+  std::cout << "Data received for LSA(name): " << dataName << std::endl;
+  _LOG_DEBUG("Data received for LSA(name): " << dataName);
   string dataContent(reinterpret_cast<const char*>(data.getContent().value()));
   string chkString("LSA");
   int32_t lsaPosition = util::getNameComponentPosition(dataName, chkString);
@@ -867,7 +917,8 @@
 Lsdb::processInterestTimedOut(const ndn::Interest& interest)
 {
   const ndn::Name& interestName(interest.getName());
-  cout << "Interest timed out for Name: " << interestName << endl;
+  cout << "Interest timed out for LSA(name): " << interestName << endl;
+  _LOG_DEBUG("Interest timed out for  LSA(name): " << interestName);
 }
 
 
diff --git a/src/main.cpp b/src/main.cpp
index 9e3bf12..2054e56 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -20,6 +20,7 @@
 #include <boost/cstdint.hpp>
 #include "nlsr.hpp"
 #include "conf-file-processor.hpp"
+#include "logger.hpp"
 
 using namespace nlsr;
 
@@ -54,12 +55,13 @@
     }
   }
   ConfFileProcessor cfp(nlsr, nlsr.getConfFileName());
-  int32_t res = cfp.processConfFile();
-  if (res < 0) {
+  if(!cfp.processConfFile()) {
     std::cerr << "Error in configuration file processing! Exiting from NLSR" <<
               std::endl;
     return EXIT_FAILURE;
   }
+  INIT_LOGGERS(nlsr.getConfParameter().getLogDir());
+  INIT_LOGGER("Main");
   nlsr.initialize();
   try {
     nlsr.startEventLoop();
diff --git a/src/name-prefix-list.cpp b/src/name-prefix-list.cpp
index f00d0d0..c6d1bd7 100644
--- a/src/name-prefix-list.cpp
+++ b/src/name-prefix-list.cpp
@@ -4,9 +4,12 @@
 #include <ndn-cxx/common.hpp>
 
 #include "name-prefix-list.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("NamePrefixList");
+
 using namespace std;
 
 NamePrefixList::NamePrefixList()
@@ -57,6 +60,18 @@
 }
 
 void
+NamePrefixList::writeLog()
+{
+  _LOG_DEBUG("-------Name Prefix List--------");
+  int i = 1;
+  for (std::list<ndn::Name>::iterator it = m_nameList.begin();
+       it != m_nameList.end(); it++) {
+    _LOG_DEBUG("Name " << i << " : " << (*it));
+    i++;
+  }
+}
+
+void
 NamePrefixList::print()
 {
   int i = 1;
diff --git a/src/name-prefix-list.hpp b/src/name-prefix-list.hpp
index 7b7eba1..08bd486 100644
--- a/src/name-prefix-list.hpp
+++ b/src/name-prefix-list.hpp
@@ -38,6 +38,9 @@
   }
 
   void
+  writeLog();
+
+  void
   print();
 
 private:
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index a55f634..613e800 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -5,10 +5,13 @@
 
 #include "nlsr.hpp"
 #include "adjacent.hpp"
+#include "logger.hpp"
 
 
 namespace nlsr {
 
+INIT_LOGGER("nlsr");
+
 using namespace ndn;
 using namespace std;
 
@@ -28,6 +31,7 @@
 Nlsr::setInfoInterestFilter()
 {
   ndn::Name name(m_confParam.getRouterPrefix());
+  _LOG_DEBUG("Setting interest filter for name: " << name);
   getNlsrFace().setInterestFilter(name,
                                   ndn::bind(&HelloProtocol::processInterest,
                                             &m_helloProtocol, _1, _2),
@@ -40,6 +44,7 @@
 {
   ndn::Name name = m_confParam.getLsaPrefix();
   name.append(m_confParam.getRouterPrefix());
+  _LOG_DEBUG("Setting interest filter for name: " << name);
   getNlsrFace().setInterestFilter(name,
                                   ndn::bind(&Lsdb::processInterest,
                                             &m_nlsrLsdb, _1, _2),
@@ -70,6 +75,7 @@
 void
 Nlsr::initialize()
 {
+  _LOG_DEBUG("Initializing Nlsr");
   m_confParam.buildRouterPrefix();
   m_nlsrLsdb.setLsaRefreshTime(m_confParam.getLsaRefreshTime());
   m_nlsrLsdb.setThisRouterPrefix(m_confParam.getRouterPrefix().toUri());
@@ -81,11 +87,16 @@
   m_adjacencyList.print();
   m_namePrefixList.print();
   /* debugging purpose end */
+  /* Logging start */
+  m_confParam.writeLog();
+  m_adjacencyList.writeLog();
+  m_namePrefixList.writeLog();
+  /* Logging end */
   registerPrefixes();
-  m_nlsrLsdb.buildAndInstallOwnNameLsa();
-  m_nlsrLsdb.buildAndInstallOwnCoordinateLsa();
   setInfoInterestFilter();
   setLsaInterestFilter();
+  m_nlsrLsdb.buildAndInstallOwnNameLsa();
+  m_nlsrLsdb.buildAndInstallOwnCoordinateLsa();
   m_syncLogicHandler.setSyncPrefix(m_confParam.getChronosyncPrefix().toUri());
   m_syncLogicHandler.createSyncSocket(boost::ref(*this));
   //m_interestManager.scheduleInfoInterest(10);
diff --git a/src/route/fib-entry.cpp b/src/route/fib-entry.cpp
index ba3d77a..ba2731f 100644
--- a/src/route/fib-entry.cpp
+++ b/src/route/fib-entry.cpp
@@ -1,9 +1,12 @@
 #include <list>
 #include "fib-entry.hpp"
 #include "nexthop.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("FibEntry");
+
 using namespace std;
 
 bool
@@ -30,6 +33,14 @@
   }
 }
 
+void
+FibEntry::writeLog()
+{
+  _LOG_DEBUG("Name Prefix: " << m_name);
+  _LOG_DEBUG("Seq No: " << m_seqNo);
+  m_nexthopList.writeLog();
+}
+
 ostream&
 operator<<(ostream& os, FibEntry fe)
 {
diff --git a/src/route/fib-entry.hpp b/src/route/fib-entry.hpp
index 71ecb04..14d3772 100644
--- a/src/route/fib-entry.hpp
+++ b/src/route/fib-entry.hpp
@@ -82,6 +82,9 @@
   bool
   isEqualNextHops(NexthopList& nhlOther);
 
+  void
+  writeLog();
+
 private:
   ndn::Name m_name;
   int32_t m_timeToRefresh;
diff --git a/src/route/fib.cpp b/src/route/fib.cpp
index a68d4d6..17269dc 100644
--- a/src/route/fib.cpp
+++ b/src/route/fib.cpp
@@ -6,12 +6,14 @@
 #include "nexthop-list.hpp"
 #include "face-map.hpp"
 #include "fib.hpp"
-
+#include "logger.hpp"
 
 
 
 namespace nlsr {
 
+INIT_LOGGER("Fib");
+
 using namespace std;
 using namespace ndn;
 
@@ -34,6 +36,8 @@
 {
   std::cout << "Fib::scheduleEntryRefreshing Called" << std::endl;
   std::cout << "Name: " << name << " Seq Num: " << feSeqNum << std::endl;
+  _LOG_DEBUG("Fib::scheduleEntryRefreshing Called");
+  _LOG_DEBUG("Name: " << name << " Seq Num: " << feSeqNum);
   return m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(refreshTime),
                                              ndn::bind(&Fib::refreshEntry, this,
                                                        name, feSeqNum));
@@ -51,6 +55,7 @@
     std::cout << "Entry found with Seq Num: " << feSeqNum << std::endl;
     if (it->getSeqNo() == feSeqNum) {
       std::cout << "Refreshing the FIB entry" << std::endl;
+      _LOG_DEBUG("Refreshing the FIB entry. Name: " <<  name);
       for (std::list<NextHop>::iterator nhit =
              (*it).getNexthopList().getNextHops().begin();
            nhit != (*it).getNexthopList().getNextHops().end(); nhit++) {
@@ -70,6 +75,7 @@
 void
 Fib::remove(const ndn::Name& name)
 {
+  _LOG_DEBUG("Fib::remove called");
   std::list<FibEntry>::iterator it = std::find_if(m_table.begin(),
                                                   m_table.end(),
                                                   bind(&fibEntryNameCompare, _1, name));
@@ -91,6 +97,7 @@
     }
     std::cout << "Cancellling Scheduled event" << std::endl;
     std::cout << "Name: " << name << "Seq num: " << it->getSeqNo() << std::endl;
+    _LOG_DEBUG("Cancelling Scheduled event. Name: " << name);
     cancelScheduledExpiringEvent((*it).getExpiringEventId());
     m_table.erase(it);
   }
@@ -101,6 +108,7 @@
 Fib::update(const ndn::Name& name, NexthopList& nextHopList)
 {
   std::cout << "Fib::updateFib Called" << std::endl;
+  _LOG_DEBUG("Fib::updateFib Called");
   int startFace = 0;
   int endFace = getNumberOfFacesForName(nextHopList,
                                         m_nlsr.getConfParameter().getMaxFacesPerPrefix());
@@ -151,6 +159,7 @@
       it->setTimeToRefresh(m_refreshTime);
       std::cout << "Cancellling Scheduled event" << std::endl;
       std::cout << "Name: " << name << "Seq num: " << it->getSeqNo() << std::endl;
+      _LOG_DEBUG("Cancelling Scheduled event. Name: " << name);
       cancelScheduledExpiringEvent(it->getExpiringEventId());
       it->setSeqNo(it->getSeqNo() + 1);
       (*it).setExpiringEventId(scheduleEntryRefreshing(it->getName() ,
@@ -167,11 +176,13 @@
 void
 Fib::clean()
 {
+  _LOG_DEBUG("Fib::clean called");
   for (std::list<FibEntry>::iterator it = m_table.begin(); it != m_table.end();
        ++it) {
     std::cout << "Cancellling Scheduled event" << std::endl;
     std::cout << "Name: " << it->getName() << "Seq num: " << it->getSeqNo() <<
               std::endl;
+    _LOG_DEBUG("Cancelling Scheduled event. Name: " << it->getName());
     cancelScheduledExpiringEvent((*it).getExpiringEventId());
     for (std::list<NextHop>::iterator nhit =
            (*it).getNexthopList().getNextHops().begin();
@@ -320,6 +331,15 @@
   std::cout << message << ": " << error << " (code: " << code << ")";
 }
 
+void
+Fib::writeLog()
+{
+  _LOG_DEBUG("-------------------FIB-----------------------------");
+  for (std::list<FibEntry>::iterator it = m_table.begin(); it != m_table.end();
+       ++it) {
+    (*it).writeLog();
+  }
+}
 
 void
 Fib::print()
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
index 559df7a..d144e1f 100644
--- a/src/route/fib.hpp
+++ b/src/route/fib.hpp
@@ -76,6 +76,9 @@
   void
   setStrategy(const ndn::Name& name, const std::string& strategy);
 
+  void
+  writeLog();
+
 private:
   void
   unregisterPrefix(const ndn::Name& namePrefix, const std::string& faceUri);
diff --git a/src/route/name-prefix-table-entry.cpp b/src/route/name-prefix-table-entry.cpp
index cb7b869..9a734f7 100644
--- a/src/route/name-prefix-table-entry.cpp
+++ b/src/route/name-prefix-table-entry.cpp
@@ -3,9 +3,12 @@
 #include "name-prefix-table-entry.hpp"
 #include "routing-table-entry.hpp"
 #include "nexthop.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("NamePrefixTableEntry");
+
 using namespace std;
 
 void
@@ -65,6 +68,19 @@
   }
 }
 
+void
+NamePrefixTableEntry::writeLog()
+{
+  _LOG_DEBUG("Name: " << m_namePrefix);
+  for (std::list<RoutingTableEntry>::iterator it = m_rteList.begin();
+       it != m_rteList.end(); ++it) {
+    _LOG_DEBUG("Destination: " << (*it).getDestination());
+    _LOG_DEBUG("Nexthops: ");
+    (*it).getNexthopList().writeLog();
+  }
+  m_nexthopList.writeLog();
+}
+
 //debugging purpose
 ostream&
 operator<<(ostream& os, NamePrefixTableEntry& npte)
diff --git a/src/route/name-prefix-table-entry.hpp b/src/route/name-prefix-table-entry.hpp
index 13a31ea..b42d396 100644
--- a/src/route/name-prefix-table-entry.hpp
+++ b/src/route/name-prefix-table-entry.hpp
@@ -66,6 +66,9 @@
   void
   addRoutingTableEntry(RoutingTableEntry& rte);
 
+  void
+  writeLog();
+
 private:
   ndn::Name m_namePrefix;
   std::list<RoutingTableEntry> m_rteList;
diff --git a/src/route/name-prefix-table.cpp b/src/route/name-prefix-table.cpp
index 61b2722..a8071bc 100644
--- a/src/route/name-prefix-table.cpp
+++ b/src/route/name-prefix-table.cpp
@@ -6,11 +6,12 @@
 #include "name-prefix-table.hpp"
 #include "name-prefix-table-entry.hpp"
 #include "routing-table.hpp"
-
-
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("NamePrefixTable");
+
 using namespace std;
 
 static bool
@@ -131,6 +132,17 @@
 }
 
 void
+NamePrefixTable::writeLog()
+{
+  _LOG_DEBUG("----------------NPT----------------------");
+  for (std::list<NamePrefixTableEntry>::iterator it = m_table.begin();
+       it != m_table.end();
+       ++it) {
+    (*it).writeLog();
+  }
+}
+
+void
 NamePrefixTable::print()
 {
   std::cout << "----------------NPT----------------------" << std::endl;
diff --git a/src/route/name-prefix-table.hpp b/src/route/name-prefix-table.hpp
index b872161..532410f 100644
--- a/src/route/name-prefix-table.hpp
+++ b/src/route/name-prefix-table.hpp
@@ -28,6 +28,9 @@
   updateWithNewRoute();
 
   void
+  writeLog();
+
+  void
   print();
 
 private:
diff --git a/src/route/nexthop-list.cpp b/src/route/nexthop-list.cpp
index 12536f1..37f3480 100644
--- a/src/route/nexthop-list.cpp
+++ b/src/route/nexthop-list.cpp
@@ -1,9 +1,12 @@
 #include <iostream>
 #include "nexthop-list.hpp"
 #include "nexthop.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("NexthopList");
+
 using namespace std;
 
 static bool
@@ -69,6 +72,17 @@
   m_nexthopList.sort(nextHopSortingComparator);
 }
 
+void
+NexthopList::writeLog()
+{
+  int i = 1;
+  for (std::list<NextHop>::iterator it = m_nexthopList.begin();
+       it != m_nexthopList.end() ; it++, i++) {
+    _LOG_DEBUG("Nexthop " << i << ": " << (*it).getConnectingFaceUri()
+               << " Route Cost: " << (*it).getRouteCost());
+  }
+}
+
 ostream&
 operator<<(ostream& os, NexthopList& nhl)
 {
diff --git a/src/route/nexthop-list.hpp b/src/route/nexthop-list.hpp
index 2607218..8e7843d 100644
--- a/src/route/nexthop-list.hpp
+++ b/src/route/nexthop-list.hpp
@@ -50,6 +50,9 @@
     return m_nexthopList;
   }
 
+  void
+  writeLog();
+
 private:
   std::list<NextHop> m_nexthopList;
 };
diff --git a/src/route/routing-table.cpp b/src/route/routing-table.cpp
index bcfb61c..21ac00c 100644
--- a/src/route/routing-table.cpp
+++ b/src/route/routing-table.cpp
@@ -9,9 +9,12 @@
 #include "routing-table-calculator.hpp"
 #include "routing-table-entry.hpp"
 #include "name-prefix-table.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("RoutingTable");
+
 using namespace std;
 
 void
@@ -22,6 +25,7 @@
   pnlsr.getLsdb().printAdjLsdb();
   pnlsr.getLsdb().printCorLsdb();
   pnlsr.getLsdb().printNameLsdb();
+  pnlsr.getNamePrefixTable().writeLog();
   if (pnlsr.getIsRoutingTableCalculating() == false) {
     //setting routing table calculation
     pnlsr.setIsRoutingTableCalculating(true);
@@ -30,6 +34,7 @@
           std::string("adjacency"))) {
       if (pnlsr.getIsBuildAdjLsaSheduled() != 1) {
         std::cout << "CLearing old routing table ....." << std::endl;
+        _LOG_DEBUG("CLearing old routing table .....");
         clearRoutingTable();
         // for dry run options
         clearDryRoutingTable();
@@ -52,16 +57,23 @@
         printRoutingTable();
         pnlsr.getNamePrefixTable().print();
         pnlsr.getFib().print();
+        writeLog();
+        pnlsr.getNamePrefixTable().writeLog();
+        pnlsr.getFib().writeLog();
         //debugging purpose end
       }
       else {
         std::cout << "Adjacency building is scheduled, so ";
         std::cout << "routing table can not be calculated :(" << std::endl;
+        _LOG_DEBUG("Adjacency building is scheduled, so"
+                   " routing table can not be calculated :(");
       }
     }
     else {
       std::cout << "No Adj LSA of router itself,";
       std::cout <<	" so Routing table can not be calculated :(" << std::endl;
+      _LOG_DEBUG("No Adj LSA of router itself,"
+                 " so Routing table can not be calculated :(");
       clearRoutingTable();
       clearDryRoutingTable(); // for dry run options
       // need to update NPT here
@@ -71,6 +83,9 @@
       printRoutingTable();
       pnlsr.getNamePrefixTable().print();
       pnlsr.getFib().print();
+      writeLog();
+      pnlsr.getNamePrefixTable().writeLog();
+      pnlsr.getFib().writeLog();
       //debugging purpose end
     }
     pnlsr.setIsRouteCalculationScheduled(false); //clear scheduled flag
@@ -159,6 +174,18 @@
 }
 
 void
+RoutingTable::writeLog()
+{
+  _LOG_DEBUG("---------------Routing Table------------------");
+  for (std::list<RoutingTableEntry>::iterator it = m_rTable.begin() ;
+       it != m_rTable.end(); ++it) {
+    _LOG_DEBUG("Destination: " << (*it).getDestination());
+    _LOG_DEBUG("Nexthops: ");
+    (*it).getNexthopList().writeLog();
+  }
+}
+
+void
 RoutingTable::printRoutingTable()
 {
   std::cout << "---------------Routing Table------------------" << std::endl;
diff --git a/src/route/routing-table.hpp b/src/route/routing-table.hpp
index 983596b..0117a6a 100644
--- a/src/route/routing-table.hpp
+++ b/src/route/routing-table.hpp
@@ -63,6 +63,9 @@
   void
   clearDryRoutingTable();
 
+  void
+  writeLog();
+
   const int m_NO_NEXT_HOP;
 
   std::list<RoutingTableEntry> m_rTable;
diff --git a/src/sequencing-manager.cpp b/src/sequencing-manager.cpp
index 3d63a3d..dbf943f 100644
--- a/src/sequencing-manager.cpp
+++ b/src/sequencing-manager.cpp
@@ -6,9 +6,12 @@
 #include <unistd.h>
 
 #include "sequencing-manager.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 
+INIT_LOGGER("SequencingManager");
+
 using namespace std;
 
 void
