diff --git a/src/logger.cpp b/src/logger.cpp
new file mode 100644
index 0000000..c2ca954
--- /dev/null
+++ b/src/logger.cpp
@@ -0,0 +1,57 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "logger.hpp"
+
+#include <log4cxx/logger.h>
+#include <log4cxx/basicconfigurator.h>
+#include <log4cxx/consoleappender.h>
+#include <log4cxx/patternlayout.h>
+#include <log4cxx/level.h>
+#include <log4cxx/propertyconfigurator.h>
+#include <log4cxx/defaultconfigurator.h>
+#include <log4cxx/helpers/exception.h>
+
+#include <unistd.h>
+
+namespace ndn {
+namespace ndns {
+namespace log {
+
+void
+init(const std::string& configFile/* = "log4cxx.properties"*/)
+{
+  using namespace log4cxx;
+  using namespace log4cxx::helpers;
+
+  if (access(configFile.c_str(), R_OK) == 0) {
+    PropertyConfigurator::configureAndWatch(configFile.c_str());
+  }
+  else {
+    PatternLayoutPtr   layout(new PatternLayout("%d{HH:mm:ss} %p %c{1} - %m%n"));
+    ConsoleAppenderPtr appender(new ConsoleAppender(layout));
+
+    BasicConfigurator::configure(appender);
+    Logger::getRootLogger()->setLevel(log4cxx::Level::getInfo());
+  }
+}
+
+} // namespace log
+} // namespace ndns
+} // namespace ndn
diff --git a/src/logger.hpp b/src/logger.hpp
new file mode 100644
index 0000000..c17527b
--- /dev/null
+++ b/src/logger.hpp
@@ -0,0 +1,67 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NDNS_LOGGER_HPP
+#define NDNS_LOGGER_HPP
+
+#include <log4cxx/logger.h>
+
+namespace ndn {
+namespace ndns {
+namespace log {
+
+void
+init(const std::string& configFile = "log4cxx.properties");
+
+// The following has to be pre-processor defines in order to properly determine
+// log locations
+
+#define NDNS_LOG_INIT(name)                                             \
+  static log4cxx::LoggerPtr staticModuleLogger = log4cxx::Logger::getLogger(name);
+
+#define NDNS_LOG_TRACE(x)                       \
+  LOG4CXX_TRACE(staticModuleLogger, x);
+
+#define NDNS_LOG_DEBUG(x)                       \
+  LOG4CXX_DEBUG(staticModuleLogger, x);
+
+#define NDNS_LOG_INFO(x)                        \
+  LOG4CXX_INFO(staticModuleLogger, x);
+
+#define NDNS_LOG_WARN(x)                        \
+  LOG4CXX_WARN(staticModuleLogger, x);
+
+#define NDNS_LOG_ERROR(x)                       \
+  LOG4CXX_ERROR(staticModuleLogger, x);
+
+#define NDNS_LOG_FATAL(x)                       \
+  LOG4CXX_FATAL(staticModuleLogger, x);
+
+#define NDNS_LOG_FUNCTION(x)                                            \
+  LOG4CXX_TRACE(staticModuleLogger, __FUNCTION__ << "(" << x << ")");
+
+#define NDNS_LOG_FUNCTION_NOARGS                                \
+  LOG4CXX_TRACE(staticModuleLogger, __FUNCTION__ << "()");
+
+
+} // namespace log
+} // namespace ndns
+} // namespace ndn
+
+#endif // NDNS_LOGGER_HPP
diff --git a/tests/logger.cpp b/tests/logger.cpp
new file mode 100644
index 0000000..2352a92
--- /dev/null
+++ b/tests/logger.cpp
@@ -0,0 +1,231 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "logger.hpp"
+#include "boost-test.hpp"
+
+#include <fstream>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/filesystem.hpp>
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+BOOST_AUTO_TEST_SUITE(Logger)
+
+class Fixture
+{
+public:
+  Fixture()
+    : m_logConfigFilename(boost::filesystem::unique_path().native())
+    , m_logFilename(boost::filesystem::unique_path().native())
+  {
+  }
+
+  ~Fixture()
+  {
+    boost::filesystem::remove(boost::filesystem::path(getLogConfigFilename()));
+    boost::filesystem::remove(boost::filesystem::path(getLogFilename()));
+
+    log::init("unit-tests.log4cxx");
+  }
+
+  const std::string&
+  getLogConfigFilename()
+  {
+    return m_logConfigFilename;
+  }
+
+  const std::string&
+  getLogFilename()
+  {
+    return m_logFilename;
+  }
+
+  void
+  verifyOutput(const std::string expected[], size_t nExpected)
+  {
+    std::ifstream is(getLogFilename().c_str());
+    std::string buffer((std::istreambuf_iterator<char>(is)),
+                       (std::istreambuf_iterator<char>()));
+
+    std::vector<std::string> components;
+    boost::split(components, buffer, boost::is_any_of(" ,\n"));
+
+    // expected + number of timestamps (one per log statement) + trailing newline of last statement
+    BOOST_REQUIRE_EQUAL(components.size(), nExpected);
+
+    for (size_t i = 0; i < nExpected; ++i) {
+      if (expected[i] == "")
+        continue;
+
+      BOOST_CHECK_EQUAL(components[i], expected[i]);
+    }
+  }
+
+private:
+  std::string m_logConfigFilename;
+  std::string m_logFilename;
+};
+
+BOOST_FIXTURE_TEST_CASE(AllLevels, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=TRACE, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c{1} - %m%n\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  NDNS_LOG_INIT("DefaultConfig");
+
+  NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+  NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+  NDNS_LOG_INFO("info-message-Jjxjshj13");
+  NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+  NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+  NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+
+  const std::string EXPECTED[] =
+    {
+      "", "TRACE", "DefaultConfig", "-", "trace-message-JHGFDSR^1",
+      "", "DEBUG", "DefaultConfig", "-", "debug-message-IGg2474fdksd-fo-151617",
+      "", "INFO",  "DefaultConfig", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "DefaultConfig", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "DefaultConfig", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "DefaultConfig", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+BOOST_FIXTURE_TEST_CASE(UpToInfo, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=INFO, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c{1} - %m%n\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  NDNS_LOG_INIT("DefaultConfig");
+
+  NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+  NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+  NDNS_LOG_INFO("info-message-Jjxjshj13");
+  NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+  NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+  NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+
+  const std::string EXPECTED[] =
+    {
+      "", "INFO",  "DefaultConfig", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "DefaultConfig", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "DefaultConfig", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "DefaultConfig", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+BOOST_FIXTURE_TEST_CASE(OnlySelectedModule, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=OFF, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c - %m%n\n"
+       << "log4j.logger.SelectedModule=TRACE\n"
+       << "log4j.logger.SelectedModule.Submodule=FATAL\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  {
+    NDNS_LOG_INIT("DefaultConfig");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  {
+    NDNS_LOG_INIT("SelectedModule");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  {
+    NDNS_LOG_INIT("SelectedModule.Submodule");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  const std::string EXPECTED[] =
+    {
+      "", "TRACE", "SelectedModule", "-", "trace-message-JHGFDSR^1",
+      "", "DEBUG", "SelectedModule", "-", "debug-message-IGg2474fdksd-fo-151617",
+      "", "INFO",  "SelectedModule", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "SelectedModule", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "SelectedModule", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "SelectedModule", "-", "fatal-message-JJSjaamcng",
+      "", "FATAL", "SelectedModule.Submodule", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/main.cpp b/tests/main.cpp
index eec5adb..7d606e7 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -21,3 +21,24 @@
 #define BOOST_TEST_DYN_LINK 1
 
 #include <boost/test/unit_test.hpp>
+
+#include "logger.hpp"
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+class UnitTestsLogging
+{
+public:
+  UnitTestsLogging()
+  {
+    log::init("unit-tests.log4cxx");
+  }
+};
+
+BOOST_GLOBAL_FIXTURE(UnitTestsLogging)
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/skeleton.cpp b/tests/skeleton.cpp
index 59a45fb..afa3bde 100644
--- a/tests/skeleton.cpp
+++ b/tests/skeleton.cpp
@@ -24,8 +24,6 @@
 namespace ndns {
 namespace tests {
 
-using namespace std;
-
 BOOST_AUTO_TEST_SUITE(Skeleton)
 
 BOOST_AUTO_TEST_CASE(TestCase)
diff --git a/wscript b/wscript
index 35afec9..5886fc1 100644
--- a/wscript
+++ b/wscript
@@ -68,7 +68,7 @@
         name='ndns-objects',
         source=bld.path.ant_glob(['src/**/*.cpp'],
                                  excl=['src/main.cpp']),
-        use='version NDN_CXX BOOST',
+        use='version NDN_CXX LOG4CXX BOOST',
         includes='src',
         export_includes='src',
     )
