logger.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
26 #include "logger.hpp"
27 
28 #ifdef HAVE_CUSTOM_LOGGER
29 #error "This file should not be compiled when custom logger is used"
30 #endif
31 
32 #include <ndn-cxx/util/time.hpp>
33 #include <cinttypes>
34 #include <stdio.h>
35 #include <type_traits>
36 
37 namespace nfd {
38 
39 Logger::Logger(const std::string& name, LogLevel level)
40  : m_moduleName(name)
41  , m_enabledLogLevel(level)
42 {
43 }
44 
45 std::ostream&
46 operator<<(std::ostream& os, const LoggerTimestamp&)
47 {
48  using namespace ndn::time;
49 
50  static const microseconds::rep ONE_SECOND = 1000000;
51  microseconds::rep microsecondsSinceEpoch = duration_cast<microseconds>(
52  system_clock::now().time_since_epoch()).count();
53 
54  // 10 (whole seconds) + '.' + 6 (fraction) + '\0'
55  char buffer[10 + 1 + 6 + 1];
56  BOOST_ASSERT_MSG(microsecondsSinceEpoch / ONE_SECOND <= 9999999999L,
57  "whole seconds cannot fit in 10 characters");
58 
59  static_assert(std::is_same<microseconds::rep, int_least64_t>::value,
60  "PRIdLEAST64 is incompatible with microseconds::rep");
61  // - std::snprintf not found in some environments
62  // http://redmine.named-data.net/issues/2299 for more information
63  snprintf(buffer, sizeof(buffer), "%" PRIdLEAST64 ".%06" PRIdLEAST64,
64  microsecondsSinceEpoch / ONE_SECOND,
65  microsecondsSinceEpoch % ONE_SECOND);
66 
67  return os << buffer;
68 }
69 
70 } // namespace nfd
a tag that writes a timestamp upon stream output
Definition: logger.hpp:105
std::ostream & operator<<(std::ostream &os, const LoggerTimestamp &)
write a timestamp to os
Definition: logger.cpp:46
Copyright (c) 2014-2015, Regents of the University of California, Arizona Board of Regents...
Definition: algorithm.hpp:32
Logger(const std::string &name, LogLevel level)
Definition: logger.cpp:39
LogLevel
indicates a log level
Definition: logger.hpp:42