diff --git a/nlsr.conf b/nlsr.conf
index 48f34a6..f204d12 100644
--- a/nlsr.conf
+++ b/nlsr.conf
@@ -14,9 +14,21 @@
   ; InterestLifetime (in seconds) for LSA fetching
   lsa-interest-lifetime 4    ; default value 4. Valid values 1-60
 
-  ; log-level is to set the levels of log for NLSR
+  ; log-level is used to set the logging level for NLSR.
+  ; All debugging levels listed above the selected value are enabled.
+  ;
+  ; Valid values:
+  ;
+  ;  NONE ; no messages
+  ;  ERROR ; error messages
+  ;  WARN ; warning messages
+  ;  INFO ; informational messages (default)
+  ;  DEBUG ; debugging messages
+  ;  TRACE ; trace messages (most verbose)
+  ;  ALL ; all messages
 
-  log-level  INFO       ; default value INFO, valid value DEBUG, INFO
+  log-level  INFO
+
   log-dir /var/log/nlsr/  ; path for log directory (Absolute path)
   seq-dir /var/lib/nlsr/  ; path for sequence directory (Absolute path)
 }
diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
index 5f3c147..726d2af 100644
--- a/src/conf-file-processor.cpp
+++ b/src/conf-file-processor.cpp
@@ -189,13 +189,15 @@
   }
 
   try {
+
     std::string logLevel = section.get<string>("log-level");
-    if ( boost::iequals(logLevel, "info") || boost::iequals(logLevel, "debug")) {
+
+    if (isValidLogLevel(logLevel)) {
       m_nlsr.getConfParameter().setLogLevel(logLevel);
     }
     else {
-      std::cerr << "Wrong value for log-level ";
-      std::cerr << "Allowed value: INFO, DEBUG" << std::endl;
+      std::cerr << "Invalid value for log-level ";
+      std::cerr << "Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, NONE" << std::endl;
       return false;
     }
   }
diff --git a/src/logger.cpp b/src/logger.cpp
index 933f4a3..a82f5a9 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -27,24 +27,48 @@
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/rollingfileappender.h>
 
+#include <boost/algorithm/string.hpp>
+
 #include "logger.hpp"
 
 void
-INIT_LOGGERS(const std::string& logDir)
+INIT_LOGGERS(const std::string& logDir, const std::string& logLevel)
 {
   static bool configured = false;
-  if (configured) return;
+
+  if (configured) {
+    return;
+  }
 
   log4cxx::PatternLayoutPtr
-           layout(new log4cxx::PatternLayout("%date{yyyyMMddHHmmssSSS} %c %L: %m%n"));
+           layout(new log4cxx::PatternLayout("%date{yyyyMMddHHmmssSSS} %p: [%c] %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());
+
+  if (boost::iequals(logLevel, "none")) {
+    log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getOff());
+  }
+  else {
+    log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::toLevel(logLevel));
+  }
 
   configured = true;
 }
+
+bool
+isValidLogLevel(const std::string& logLevel)
+{
+  return boost::iequals(logLevel, "all")   || boost::iequals(logLevel, "trace") ||
+         boost::iequals(logLevel, "debug") || boost::iequals(logLevel, "info")  ||
+         boost::iequals(logLevel, "warn")  || boost::iequals(logLevel, "error") ||
+         boost::iequals(logLevel, "none");
+}
diff --git a/src/logger.hpp b/src/logger.hpp
index 6a487fb..267f30f 100644
--- a/src/logger.hpp
+++ b/src/logger.hpp
@@ -25,17 +25,31 @@
 
 #include <log4cxx/logger.h>
 
-
 #define INIT_LOGGER(name) \
   static log4cxx::LoggerPtr staticModuleLogger = log4cxx::Logger::getLogger(name)
 
+#define _LOG_TRACE(x) \
+  LOG4CXX_TRACE(staticModuleLogger, x)
+
 #define _LOG_DEBUG(x) \
-  LOG4CXX_DEBUG(staticModuleLogger,x)
+  LOG4CXX_DEBUG(staticModuleLogger, x)
 
 #define _LOG_INFO(x) \
   LOG4CXX_INFO(staticModuleLogger, x)
 
+#define _LOG_WARN(x) \
+  LOG4CXX_WARN(staticModuleLogger, x)
+
+#define _LOG_ERROR(x) \
+  LOG4CXX_ERROR(staticModuleLogger, x)
+
+#define _LOG_FATAL(x) \
+  LOG4CXX_FATAL(staticModuleLogger, x);
+
 void
-INIT_LOGGERS(const std::string& logDir);
+INIT_LOGGERS(const std::string& logDir, const std::string& logLevel);
+
+bool
+isValidLogLevel(const std::string& logLevel);
 
 #endif // NLSR_LOGGER_HPP
diff --git a/src/main.cpp b/src/main.cpp
index 752843a..aafca1d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -60,8 +60,10 @@
     std::cerr << "Error in configuration file processing! Exiting from NLSR" << std::endl;
     return EXIT_FAILURE;
   }
-  INIT_LOGGERS(nlsr.getConfParameter().getLogDir());
+
+  INIT_LOGGERS(nlsr.getConfParameter().getLogDir(), nlsr.getConfParameter().getLogLevel());
   INIT_LOGGER("Main");
+
   nlsr.initialize();
   if (nlsr.getIsSetDaemonProcess()) {
     nlsr.daemonize();
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index b6305b9..430458d 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -35,7 +35,7 @@
 
 BOOST_AUTO_TEST_CASE(LsdbRemoveAndExists)
 {
-  INIT_LOGGERS("/tmp");
+  INIT_LOGGERS("/tmp", "DEBUG");
 
   Nlsr nlsr1;
   ndn::time::system_clock::TimePoint testTimePoint =  ndn::time::system_clock::now();
