Add libboost-signals library to build setup
[senf.git] / Utils / Logger / IOStreamTarget.hh
index 1d976cf..8aa5829 100644 (file)
@@ -23,8 +23,8 @@
 /** \file
     \brief IOStreamTarget public header */
 
-#ifndef HH_IOStreamTarget_
-#define HH_IOStreamTarget_ 1
+#ifndef HH_SENF_Utils_Logger_IOStreamTarget_
+#define HH_SENF_Utils_Logger_IOStreamTarget_ 1
 
 // Custom includes
 #include <boost/utility.hpp>
@@ -40,25 +40,12 @@ namespace log {
     /** \brief Write %log messages to arbitrary std::ostream
 
         This target will write %log messages to an arbitrary std::ostream in the format
-        <pre>
-        <date> [<area>] <message>
-        </pre>
+        \verbatim <date> [<level>][<area>] <message> \endverbatim
 
-        The \e area will be omitted it it is \c senf::log::DefaultArea.
+        The \e area will be omitted if it is \c senf::log::DefaultArea.
         
-        The date formatting is set using the Boost.DateTime date_facet, e.g.:
-        \code
-        stream.imbue( std::locale(stream.getloc(), 
-                                  new boost::posix_time::time_facet("%Y%m%d %H:%M:%S")) );
-        \endcode
-
-        By default, the date-time will be written in extended ISO format.
-
         \warning The class keeps a reference to the passed stream.
         
-        \note This class will permanently and globally change the date formating of the given
-            stream if no \c boost::posix_time::time_facet has been set.
-
         \ingroup targets
       */
     class IOStreamTarget
@@ -74,21 +61,50 @@ namespace log {
         ///@}
         ///////////////////////////////////////////////////////////////////////////
 
+        void showTime(bool flag = true); ///< Enable or disable output of time field
+        void showStream(bool flag = true); ///< Enable or disable output of stream field
+        void showLevel(bool flag = true); ///< Enable or disable output of log level
+        void showArea(bool flag = true); ///< Enable or disable output of log area
+
+        void timeFormat(std::string const & format);
+                                        ///< Set time format
+                                        /**< The date formatting is set using the Boost.DateTime
+                                             date_facet, e.g.
+                                             \code
+                                                 target.timeFormat("%Y%m%d %H:%M:%S");
+                                             \endcode
+                                             If the \c timeFormat is set to the empty string, the
+                                             time is written out as unformatted ClockService value.
+
+                                             By default, the date-time will be written in extended
+                                             ISO format.
+                                             \param[in] format Date/Time format string */
+
+        void tag(std::string const & tag);
+        
     protected:
-
-    private:
-        void v_write(boost::posix_time::ptime timestamp, std::string const & stream, 
+        void v_write(time_type timestamp, std::string const & stream, 
                      std::string const & area, unsigned level, 
                      std::string const & message);
 
+    private:
         std::ostream & stream_;
-        static char const * const LEVELNAMES_[8];
+
+        std::string tag_;
+        std::stringstream datestream_;
+        bool noformat_;
+        bool showTime_;
+        bool showStream_;
+        bool showLevel_;
+        bool showArea_;
+
+        time_type timeBase_;
     };
 
 }}
 
 ///////////////////////////////hh.e////////////////////////////////////////
-//#include "IOStreamTarget.cci"
+#include "IOStreamTarget.cci"
 //#include "IOStreamTarget.ct"
 //#include "IOStreamTarget.cti"
 #endif