From d5589f2bead8a82bd1c8a7010be1d7b5224b9283 Mon Sep 17 00:00:00 2001
From: g0dil <g0dil@wiback.org>
Date: Fri, 26 Oct 2007 22:35:32 +0000
Subject: [PATCH] Bugfix: More template-logging fixes

---
 PPI/DebugModules.hh            |  2 +-
 PPI/DebugModules.test.cc       | 11 ++++-------
 Utils/Logger/IOStreamTarget.hh |  3 +++
 Utils/Logger/Log.hh            |  4 ++--
 Utils/Logger/Log.ih            | 11 +++++++++++
 Utils/Logger/Target.hh         |  3 +++
 6 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/PPI/DebugModules.hh b/PPI/DebugModules.hh
index 58e52c64e..67068d1e2 100644
--- a/PPI/DebugModules.hh
+++ b/PPI/DebugModules.hh
@@ -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, 
diff --git a/PPI/DebugModules.test.cc b/PPI/DebugModules.test.cc
index 20101981a..a5e518389 100644
--- a/PPI/DebugModules.test.cc
+++ b/PPI/DebugModules.test.cc
@@ -31,11 +31,6 @@
 #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////////////////////////////////////////
diff --git a/Utils/Logger/IOStreamTarget.hh b/Utils/Logger/IOStreamTarget.hh
index 94f999948..745ee798a 100644
--- a/Utils/Logger/IOStreamTarget.hh
+++ b/Utils/Logger/IOStreamTarget.hh
@@ -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
diff --git a/Utils/Logger/Log.hh b/Utils/Logger/Log.hh
index 53f0629e9..5c388fcb8 100644
--- a/Utils/Logger/Log.hh
+++ b/Utils/Logger/Log.hh
@@ -127,8 +127,8 @@
     \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))
 
 ///\}
 ///\}
diff --git a/Utils/Logger/Log.ih b/Utils/Logger/Log.ih
index 9e259c2ad..95c60201c 100644
--- a/Utils/Logger/Log.ih
+++ b/Utils/Logger/Log.ih
@@ -40,6 +40,17 @@
         }                                                                                         \
     } 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
 
diff --git a/Utils/Logger/Target.hh b/Utils/Logger/Target.hh
index 9a47194ae..24b6ea3cd 100644
--- a/Utils/Logger/Target.hh
+++ b/Utils/Logger/Target.hh
@@ -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
     {
-- 
GitLab