diff --git a/daemon/common.hpp b/daemon/common.hpp
index c377a65..fc37c02 100644
--- a/daemon/common.hpp
+++ b/daemon/common.hpp
@@ -25,6 +25,8 @@
 #include <list>
 #include <set>
 
+#include "core/logger.hpp"
+
 namespace nfd {
 
 using boost::noncopyable;
diff --git a/daemon/core/logger.cpp b/daemon/core/logger.cpp
new file mode 100644
index 0000000..14dd380
--- /dev/null
+++ b/daemon/core/logger.cpp
@@ -0,0 +1,27 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ *
+ * Author: Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "logger.hpp"
+
+namespace nfd
+{
+
+Logger::Logger(const std::string& name)
+  : m_moduleName(name),
+    m_isEnabled(true)
+{
+}
+
+std::ostream&
+operator<<(std::ostream& output, const Logger& obj)
+{
+  output << obj.getName();
+  return output;
+}
+
+} // namespace nfd
diff --git a/daemon/core/logger.hpp b/daemon/core/logger.hpp
new file mode 100644
index 0000000..e483ac9
--- /dev/null
+++ b/daemon/core/logger.hpp
@@ -0,0 +1,84 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ *
+ * Author: Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#ifndef NFD_CORE_LOGGER_HPP
+#define NFD_CORE_LOGGER_HPP
+
+#include "common.hpp"
+#include <iostream>
+
+namespace nfd {
+
+enum LogLevel {
+  LOG_NONE           = 0, // no messages
+  LOG_ERROR          = 1, // serious error messages
+  LOG_WARN           = 2, // warning messages
+  LOG_TRACE          = 3, // trace messages
+  LOG_DEBUG          = 4, // debug messages
+  LOG_INFO           = 5, // informational messages
+  LOG_FATAL          = 6, // fatal error messages
+  LOG_ALL            = 0x0fffffff, // all messages
+};
+
+class Logger
+{
+public:
+  Logger(const std::string& name);
+  
+  bool
+  isEnabled(LogLevel level)
+  {
+    return m_isEnabled;
+  }
+  
+  const std::string&
+  getName() const
+  {
+    return m_moduleName;
+  }
+  
+private:
+  std::string m_moduleName;
+  bool m_isEnabled;
+};
+
+std::ostream&
+operator<<(std::ostream& output, const Logger& obj);
+
+#define NFD_LOG_INIT(name)    \
+  static nfd::Logger \
+  g_logger = nfd::Logger(name);
+
+#define NFD_LOG_TRACE(expression) \
+    if(g_logger.isEnabled(nfd::LOG_TRACE)) \
+       std::cerr<<"TRACE: "<<"["<<g_logger<<"] " << expression << "\n"
+
+#define NFD_LOG_DEBUG(expression)\
+    if(g_logger.isEnabled(nfd::LOG_DEBUG)) \
+       std::cerr<<"DEBUG: "<<"["<<g_logger<<"] " << expression <<"\n"
+
+#define NFD_LOG_WARN(expression) \
+    if(g_logger.isEnabled(nfd::LOG_WARN)) \
+       std::cerr<<"WARNING: "<<"["<<g_logger<<"] " << expression <<"\n"
+
+#define NFD_LOG_INFO(expression)\
+    if(g_logger.isEnabled(nfd::LOG_INFO)) \
+       std::cerr<<"INFO: "<<"["<<g_logger<<"] " << expression <<"\n"
+  
+#define NFD_LOG_ERROR(expression)\
+    if(g_logger.isEnabled(nfd::LOG_ERROR)) \
+       std::cerr<<"ERROR: "<<"["<<g_logger<<"] " << expression <<"\n"
+  
+#define NFD_LOG_FATAL(expression)\
+    if(g_logger.isEnabled(nfd::LOG_FATAL)) \
+       std::cerr<<"FATAL: "<<"["<<g_logger<<"] " << expression <<"\n"
+  
+} //namespace nfd
+
+
+#endif
