diff --git a/src/core/log.cc b/src/core/log.cc index cc050bfd0..e9e7d9f2a 100644 --- a/src/core/log.cc +++ b/src/core/log.cc @@ -35,6 +35,7 @@ namespace ns3 { LogTimePrinter g_logTimePrinter = 0; +LogNodePrinter g_logNodePrinter = 0; typedef std::list > ComponentList; typedef std::list >::iterator ComponentListI; @@ -124,7 +125,7 @@ LogComponent::EnvVarCheck (char const * name) component = tmp; if (component == myName || component == "*") { - int level = LOG_ALL | LOG_PREFIX_TIME | LOG_PREFIX_FUNC; + int level = LOG_ALL | LOG_PREFIX_TIME | LOG_PREFIX_FUNC | LOG_PREFIX_NODE; Enable ((enum LogLevel)level); return; } @@ -178,6 +179,10 @@ LogComponent::EnvVarCheck (char const * name) { level |= LOG_PREFIX_TIME; } + else if (lev == "prefix_node") + { + level |= LOG_PREFIX_NODE; + } else if (lev == "level_error") { level |= LOG_LEVEL_ERROR; @@ -360,6 +365,15 @@ LogTimePrinter LogGetTimePrinter(void) return g_logTimePrinter; } +void LogSetNodePrinter (LogNodePrinter printer) +{ + g_logNodePrinter = printer; +} +LogNodePrinter LogGetNodePrinter(void) +{ + return g_logNodePrinter; +} + ParameterLogger::ParameterLogger (std::ostream &os) : m_itemNumber (0), diff --git a/src/core/log.h b/src/core/log.h index ef141f351..b1ec1dadc 100644 --- a/src/core/log.h +++ b/src/core/log.h @@ -48,11 +48,12 @@ enum LogLevel { LOG_LOGIC = 0x00000020, // control flow tracing within functions LOG_LEVEL_LOGIC = 0x0000003f, - LOG_ALL = 0x3fffffff, // print everything + LOG_ALL = 0x1fffffff, // print everything LOG_LEVEL_ALL = LOG_ALL, LOG_PREFIX_FUNC = 0x80000000, // prefix all trace prints with function - LOG_PREFIX_TIME = 0x40000000 // prefix all trace prints with simulation time + LOG_PREFIX_TIME = 0x40000000, // prefix all trace prints with simulation time + LOG_PREFIX_NODE = 0x20000000 // prefix all trace prints with simulation node }; /** @@ -160,6 +161,17 @@ void LogComponentDisableAll (enum LogLevel level); } \ } +#define NS_LOG_APPEND_NODE_PREFIX \ + if (g_log.IsEnabled (ns3::LOG_PREFIX_NODE)) \ + { \ + ns3::LogNodePrinter printer = ns3::LogGetNodePrinter (); \ + if (printer != 0) \ + { \ + (*printer) (std::clog); \ + std::clog << " "; \ + } \ + } + #define NS_LOG_APPEND_FUNC_PREFIX \ if (g_log.IsEnabled (ns3::LOG_PREFIX_FUNC)) \ { \ @@ -192,6 +204,7 @@ void LogComponentDisableAll (enum LogLevel level); if (g_log.IsEnabled (level)) \ { \ NS_LOG_APPEND_TIME_PREFIX; \ + NS_LOG_APPEND_NODE_PREFIX; \ NS_LOG_APPEND_CONTEXT; \ NS_LOG_APPEND_FUNC_PREFIX; \ std::clog << msg << std::endl; \ @@ -246,6 +259,7 @@ void LogComponentDisableAll (enum LogLevel level); if (g_log.IsEnabled (ns3::LOG_FUNCTION)) \ { \ NS_LOG_APPEND_TIME_PREFIX; \ + NS_LOG_APPEND_NODE_PREFIX; \ NS_LOG_APPEND_CONTEXT; \ std::clog << g_log.Name () << ":" \ << __FUNCTION__ << "()" << std::endl; \ @@ -276,6 +290,7 @@ void LogComponentDisableAll (enum LogLevel level); if (g_log.IsEnabled (ns3::LOG_FUNCTION)) \ { \ NS_LOG_APPEND_TIME_PREFIX; \ + NS_LOG_APPEND_NODE_PREFIX; \ NS_LOG_APPEND_CONTEXT; \ std::clog << g_log.Name () << ":" \ << __FUNCTION__ << "("; \ @@ -321,10 +336,14 @@ namespace ns3 { void LogComponentPrintList (void); typedef void (*LogTimePrinter) (std::ostream &os); +typedef void (*LogNodePrinter) (std::ostream &os); void LogSetTimePrinter (LogTimePrinter); LogTimePrinter LogGetTimePrinter(void); +void LogSetNodePrinter (LogNodePrinter); +LogNodePrinter LogGetNodePrinter(void); + class LogComponent { public: @@ -384,6 +403,8 @@ public: #define LogSetTimePrinter(printer) #define LogGetTimePrinter +#define LogSetNodePrinter(printer) +#define LogGetNodePrinter #endif /* LOG_ENABLE */ diff --git a/src/simulator/simulator.cc b/src/simulator/simulator.cc index ae00f5f12..3a51d6f41 100644 --- a/src/simulator/simulator.cc +++ b/src/simulator/simulator.cc @@ -65,6 +65,19 @@ TimePrinter (std::ostream &os) os << Simulator::Now ().GetSeconds () << "s"; } +static void +NodePrinter (std::ostream &os) +{ + if (Simulator::GetContext () == 0xffffffff) + { + os << "-1"; + } + else + { + os << Simulator::GetContext (); + } +} + #endif /* NS3_LOG_ENABLE */ static SimulatorImpl **PeekImpl (void) @@ -105,6 +118,7 @@ static SimulatorImpl * GetImpl (void) // in an infinite recursion until the stack explodes. // LogSetTimePrinter (&TimePrinter); + LogSetNodePrinter (&NodePrinter); } return *pimpl; } @@ -125,6 +139,7 @@ Simulator::Destroy (void) * the stack explodes. */ LogSetTimePrinter (0); + LogSetNodePrinter (0); (*pimpl)->Destroy (); (*pimpl)->Unref (); *pimpl = 0; @@ -335,6 +350,7 @@ Simulator::SetImplementation (Ptr impl) // in an infinite recursion until the stack explodes. // LogSetTimePrinter (&TimePrinter); + LogSetNodePrinter (&NodePrinter); } Ptr Simulator::GetImplementation (void)