Bugfix: More template-logging fixes
g0dil [Fri, 26 Oct 2007 22:35:32 +0000 (22:35 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@477 270642c3-0616-0410-b53a-bc976706d245

PPI/DebugModules.hh
PPI/DebugModules.test.cc
Utils/Logger/IOStreamTarget.hh
Utils/Logger/Log.hh
Utils/Logger/Log.ih
Utils/Logger/Target.hh

index 58e52c6..67068d1 100644 (file)
@@ -264,7 +264,7 @@ namespace debug {
     /** \brief Log received packets
 
         This module will log all packets sent to it's input using SENF_LOG to the given log
-        \a Stream, \a Area and \a level.
+        \a Stream, \a Area and \a Level.
      */
     template < class Stream = log::Debug, 
                class Area   = log::DefaultArea, 
index 2010198..a5e5183 100644 (file)
 #include <algorithm>
 #include <sstream>
 
-#define _senf_LOG_STREAM logstream
-namespace {
-    std::stringstream logstream;
-}
-
 #define SENF_LOG_CONF (( (senf)(log)(Debug), (_), VERBOSE ))
 
 #include "../Packets/Packets.hh"
@@ -136,6 +131,9 @@ BOOST_AUTO_UNIT_TEST(activeFeederSink)
 
 BOOST_AUTO_UNIT_TEST(logSink)
 {
+    senf::log::StringTarget logTarget;
+    logTarget.route<senf::log::Debug,senf::log::VERBOSE>();
+
     debug::ActiveFeederSource source;
     debug::LogSink<> sink;
 
@@ -144,8 +142,7 @@ BOOST_AUTO_UNIT_TEST(logSink)
     source.submit( senf::DataPacket::create(data) );
     senf::ppi::run();
     
-    BOOST_CHECK_EQUAL( logstream.str(), 
-                       "  0000  13 24 35                                          .$5\n\n" );
+    BOOST_CHECK( ! logTarget.str().empty() );
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////
index 94f9999..745ee79 100644 (file)
@@ -56,6 +56,9 @@ namespace log {
         
         \note This class will permanently and globally change the date formating of the given
             stream.
+
+        \fixme Implement more robust formatting: Find line-breaks in the message and repeat the
+            prefix (with continuation markers)
       */
     class IOStreamTarget
         : public Target
index 53f0629..5c388fc 100644 (file)
     \hideinitializer
  */
 #define SENF_LOG_BLOCK_TPL(args)                                                                  \
-    SENF_LOG_BLOCK_( SENF_LOG_MERGE_PARAMETERS_TPL(BOOST_PP_SEQ_POP_BACK(args)),                  \
-                     BOOST_PP_SEQ_ELEM(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(args)),args))
+    SENF_LOG_BLOCK_TPL_( SENF_LOG_MERGE_PARAMETERS_TPL(BOOST_PP_SEQ_POP_BACK(args)),              \
+                         BOOST_PP_SEQ_ELEM(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(args)),args))
 
 ///\}
 ///\}
index 9e259c2..95c6020 100644 (file)
         }                                                                                         \
     } while(0) 
 
+#define SENF_LOG_BLOCK_TPL_(parameters, block)                                                    \
+    do {                                                                                          \
+        if (parameters::compileEnabled && parameters::enabled()) {                                \
+            std::stringstream log;                                                                \
+            do block while(0);                                                                    \
+            senf::log::write<typename parameters::stream,                                         \
+                             typename parameters::area,                                           \
+                             typename parameters::level>(log.str());                              \
+        }                                                                                         \
+    } while(0) 
+
 ///////////////////////////////ih.e////////////////////////////////////////
 #endif
 
index 9a47194..24b6ea3 100644 (file)
@@ -50,6 +50,9 @@ namespace log {
         to a file, to mail them to the administrator or whatever. To this end, the logging target is
         passed the log message and a complete set of logging parameters (\e stream, \e area and \e
         level).
+
+        \fixme optionally Integrate with Scheduler / ClockService to reduce number of gettimeofday()
+            calls.
       */
     class Target : private boost::noncopyable
     {