diff --git a/tests/unit/clients/iterative-query-controller.cpp b/tests/unit/clients/iterative-query-controller.cpp
index 307ce8b..65ab32b 100644
--- a/tests/unit/clients/iterative-query-controller.cpp
+++ b/tests/unit/clients/iterative-query-controller.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, 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.
@@ -27,8 +27,6 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("IterativeQueryControllerTest")
-
 class QueryControllerFixture : public DbTestData
 {
 public:
@@ -87,7 +85,7 @@
   time::milliseconds lifetime(4000);
 
   bool hasDataBack = false;
-  auto ctr = make_shared<ndns::IterativeQueryController>(
+  auto ctr = std::make_shared<ndns::IterativeQueryController>(
     dstLabel, rrType, lifetime,
     [&hasDataBack] (const Data&, const Response&) {
       hasDataBack = true;
diff --git a/tests/unit/daemon/db-mgr.cpp b/tests/unit/daemon/db-mgr.cpp
index 4f730b9..ffa38b8 100644
--- a/tests/unit/daemon/db-mgr.cpp
+++ b/tests/unit/daemon/db-mgr.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, 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.
@@ -26,7 +26,7 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("DbMgrTest")
+NDNS_LOG_INIT(DbMgrTest);
 
 BOOST_AUTO_TEST_SUITE(DbMgr)
 
diff --git a/tests/unit/daemon/name-server.cpp b/tests/unit/daemon/name-server.cpp
index a8dbd3b..dae6685 100644
--- a/tests/unit/daemon/name-server.cpp
+++ b/tests/unit/daemon/name-server.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, 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.
@@ -31,7 +31,7 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("NameServerTest")
+NDNS_LOG_INIT(NameServerTest);
 
 class NameServerFixture : public DbTestData
 {
diff --git a/tests/unit/daemon/rrset-factory.cpp b/tests/unit/daemon/rrset-factory.cpp
index 625679e..39c9286 100644
--- a/tests/unit/daemon/rrset-factory.cpp
+++ b/tests/unit/daemon/rrset-factory.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, 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.
@@ -29,7 +29,7 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("RrsetFactoryTest")
+NDNS_LOG_INIT(RrsetFactoryTest);
 
 class RrsetFactoryFixture : public IdentityManagementFixture
 {
diff --git a/tests/unit/database-test-data.cpp b/tests/unit/database-test-data.cpp
index 11d2ff8..2aef965 100644
--- a/tests/unit/database-test-data.cpp
+++ b/tests/unit/database-test-data.cpp
@@ -27,7 +27,7 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("TestFakeData")
+NDNS_LOG_INIT(TestFakeData);
 
 const boost::filesystem::path DbTestData::TEST_DATABASE = TEST_CONFIG_PATH "/" "test-ndns.db";
 const Name DbTestData::TEST_IDENTITY_NAME("/test19");
diff --git a/tests/unit/logger.cpp b/tests/unit/logger.cpp
deleted file mode 100644
index e7ba277..0000000
--- a/tests/unit/logger.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016, 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/algorithm/string.hpp>
-#include <boost/algorithm/string/classification.hpp>
-
-#include "test-common.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/unit/validator/certificate-fetcher-ndns-app-cert.cpp b/tests/unit/validator/certificate-fetcher-ndns-app-cert.cpp
index 2efe67c..3f236aa 100644
--- a/tests/unit/validator/certificate-fetcher-ndns-app-cert.cpp
+++ b/tests/unit/validator/certificate-fetcher-ndns-app-cert.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017, Regents of the University of California.
+/*
+ * Copyright (c) 2014-2018, 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.
@@ -36,8 +36,6 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("AppCertFetcher")
-
 BOOST_AUTO_TEST_SUITE(AppCertFetcher)
 
 unique_ptr<security::v2::Validator>
diff --git a/tests/unit/validator/validator.cpp b/tests/unit/validator/validator.cpp
index 3434916..21f6d27 100644
--- a/tests/unit/validator/validator.cpp
+++ b/tests/unit/validator/validator.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, 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.
@@ -32,8 +32,6 @@
 namespace ndns {
 namespace tests {
 
-NDNS_LOG_INIT("ValidatorTest")
-
 BOOST_AUTO_TEST_SUITE(Validator)
 
 class ValidatorTestFixture : public DbTestData
