- Prepared class base::LogControl: Interface to logger, for
authorMichael Andres <ma@suse.de>
Wed, 8 Feb 2006 17:36:26 +0000 (17:36 +0000)
committerMichael Andres <ma@suse.de>
Wed, 8 Feb 2006 17:36:26 +0000 (17:36 +0000)
  setting logfile, etc.

zypp/ResPoolManager.h
zypp/ZYpp.cc
zypp/ZYpp.h
zypp/base/LogControl.cc [new file with mode: 0644]
zypp/base/LogControl.h [moved from zypp/base/Logger.cc with 50% similarity]
zypp/base/Makefile.am

index 104a925..4197594 100644 (file)
@@ -46,6 +46,8 @@ namespace zypp
     ResPool accessor() const
     { return ResPool( _pimpl.getPtr() ); }
 
+    /** \todo Speedup by using a data mamaber invaidated only
+     * whenever the pool content changes */
     ResPoolProxy proxy() const
     { return ResPoolProxy( accessor() ); }
 
index 252f4eb..6868d8c 100644 (file)
@@ -69,8 +69,8 @@ namespace zypp
   //
   ///////////////////////////////////////////////////////////////////
 
-  SourceFeed_Ref ZYpp::sourceFeed() const
-  { return _pimpl->sourceFeed(); }
+  //SourceFeed_Ref ZYpp::sourceFeed() const
+  //{ return _pimpl->sourceFeed(); }
 
   void ZYpp::addResolvables (const ResStore& store, bool installed)
   {
index 240efdd..d97d0fc 100644 (file)
@@ -59,7 +59,7 @@ namespace zypp
     ResPoolProxy poolProxy() const;
 
     /**  */
-    SourceFeed_Ref sourceFeed() const;
+    //SourceFeed_Ref sourceFeed() const;
 
     void addResolvables (const ResStore& store, bool installed = false);
 
@@ -81,9 +81,7 @@ namespace zypp
      */
     void finishTarget();
 
-    /**
-     *
-     */
+    /** */
     Resolver_Ptr resolver() const;
 
   protected:
diff --git a/zypp/base/LogControl.cc b/zypp/base/LogControl.cc
new file mode 100644 (file)
index 0000000..d47767a
--- /dev/null
@@ -0,0 +1,201 @@
+/*---------------------------------------------------------------------\
+|                          ____ _   __ __ ___                          |
+|                         |__  / \ / / . \ . \                         |
+|                           / / \ V /|  _/  _/                         |
+|                          / /__ | | | | | |                           |
+|                         /_____||_| |_| |_|                           |
+|                                                                      |
+\---------------------------------------------------------------------*/
+/** \file      zypp/base/LogControl.cc
+ *
+*/
+#include <iostream>
+
+#include "zypp/base/Logger.h"
+#include "zypp/base/LogControl.h"
+#include "zypp/base/String.h"
+
+using std::endl;
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+  ///////////////////////////////////////////////////////////////////
+  namespace base
+  { /////////////////////////////////////////////////////////////////
+    ///////////////////////////////////////////////////////////////////
+    namespace logger
+    { /////////////////////////////////////////////////////////////////
+
+      ///////////////////////////////////////////////////////////////////
+      //
+      //       CLASS NAME : LogControlImpl
+      //
+      /** LogControl implementation. */
+      struct LogControlImpl
+      {
+      public:
+        const Pathname & logfile() const
+        { return _logfile; }
+
+        /** \todo IMPEMENT it */
+        void logfile( const Pathname & logfile_r )
+        {}
+
+        void excessive( bool onOff_r )
+        { _excessive = onOff_r; }
+
+      public:
+        /** Provide the stream to write (logger interface) */
+        std::ostream & getStream( const char * group_r,
+                                  LogLevel     level_r,
+                                  const char * file_r,
+                                  const char * func_r,
+                                  const int    line_r );
+      private:
+        /** Current output stream. */
+        std::ostream & outStr()
+        { return *_outStrPtr; }
+
+        /** Output stream for level XXX */
+        std::ostream & fullStr()
+        { return _excessive ? outStr() : _no_stream; }
+
+      private:
+        std::ostream _no_stream;
+
+        /** must pont to the current outpot stream or _no_stream! */
+        std::ostream *_outStrPtr;
+
+        Pathname     _logfile;
+        bool         _excessive;
+
+      private:
+        /** Singleton */
+        LogControlImpl()
+        : _no_stream( 0 )
+        , _outStrPtr( getenv("ZYPP_NOLOG") ? &_no_stream : &std::cerr )
+        , _excessive( getenv("ZYPP_FULLLOG") )
+        {}
+
+      public:
+        /** Offer default Impl. */
+        static shared_ptr<LogControlImpl> instance()
+        {
+          static shared_ptr<LogControlImpl> _instance( new LogControlImpl );
+          return _instance;
+        }
+      };
+      ///////////////////////////////////////////////////////////////////
+
+      /** \relates LogControl::Impl Stream output */
+      inline std::ostream & operator<<( std::ostream & str, const LogControlImpl & obj )
+      {
+        return str << "LogControl::Impl";
+      }
+
+      /** That's what logger:: calls.  */
+      std::ostream & getStream( const char * group_r,
+                                LogLevel     level_r,
+                                const char * file_r,
+                                const char * func_r,
+                                const int    line_r )
+      {
+        // forward to LogControlImpl singleton
+        static shared_ptr<LogControlImpl> _logControl( LogControlImpl::instance() );
+        return _logControl->getStream( group_r, level_r, file_r, func_r, line_r );
+      }
+
+      ///////////////////////////////////////////////////////////////////
+      //
+      // CLASS NAME : LogControlImpl
+      //
+      ///////////////////////////////////////////////////////////////////
+
+      std::ostream & LogControlImpl::getStream( const char * group_r,
+                                                LogLevel     level_r,
+                                                const char * file_r,
+                                                const char * func_r,
+                                                const int    line_r )
+      {
+        return (level_r != E_XXX ? outStr() : fullStr() )
+        << str::form( "<%d> [%s] %s(%s):%d ",
+                      level_r, group_r,
+                      file_r, func_r, line_r );
+      }
+
+      /////////////////////////////////////////////////////////////////
+    } // namespace logger
+    ///////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // CLASS NAME : LogControl
+    //
+    ///////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // METHOD NAME : LogControl::instance
+    // METHOD TYPE : LogControl
+    //
+    LogControl LogControl::instance()
+    {
+      return LogControl();
+    }
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // METHOD NAME : LogControl::LogControl
+    // METHOD TYPE : Ctor
+    //
+    LogControl::LogControl()
+    : _pimpl( Impl::instance() )
+    {}
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // METHOD NAME : LogControl::~LogControl
+    // METHOD TYPE : Dtor
+    //
+    LogControl::~LogControl()
+    {}
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // Forward to implementation.
+    //
+    ///////////////////////////////////////////////////////////////////
+
+    const Pathname & LogControl::logfile() const
+    { return _pimpl->logfile(); }
+
+    void LogControl::logfile( const Pathname & logfile_r )
+    { _pimpl->logfile( logfile_r ); }
+
+    ///////////////////////////////////////////////////////////////////
+    //
+    // LogControl::TmpExcessive
+    //
+    ///////////////////////////////////////////////////////////////////
+    LogControl::TmpExcessive::TmpExcessive()
+    { logger::LogControlImpl::instance()->excessive( true ); }
+    LogControl::TmpExcessive::~TmpExcessive()
+    { logger::LogControlImpl::instance()->excessive( false );  }
+
+    /******************************************************************
+     **
+     **        FUNCTION NAME : operator<<
+     **        FUNCTION TYPE : std::ostream &
+    */
+    std::ostream & operator<<( std::ostream & str, const LogControl & obj )
+    {
+      return str << *obj._pimpl;
+    }
+
+    /////////////////////////////////////////////////////////////////
+  } // namespace base
+  ///////////////////////////////////////////////////////////////////
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
similarity index 50%
rename from zypp/base/Logger.cc
rename to zypp/base/LogControl.h
index 9412c05..f8d5895 100644 (file)
@@ -6,17 +6,16 @@
 |                         /_____||_| |_| |_|                           |
 |                                                                      |
 \---------------------------------------------------------------------*/
-/** \file zypp/base/Logger.cc
+/** \file      zypp/base/LogControl.h
  *
 */
-#include <cstdlib>
+#ifndef ZYPP_BASE_LOGCONTROL_H
+#define ZYPP_BASE_LOGCONTROL_H
 
-#include <iostream>
+#include <iosfwd>
 
-#include "zypp/base/Logger.h"
-#include "zypp/base/String.h"
-
-using namespace std;
+#include "zypp/base/PtrTypes.h"
+#include "zypp/Pathname.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -25,42 +24,64 @@ namespace zypp
   namespace base
   { /////////////////////////////////////////////////////////////////
 
-    namespace
+    namespace logger
     {
-      std::ostream & noStream()
-      {
-        static std::ostream no_stream( 0 );
-        return no_stream;
-      }
+      class LogControlImpl;
     }
 
     ///////////////////////////////////////////////////////////////////
-    namespace logger
-    { /////////////////////////////////////////////////////////////////
+    //
+    // CLASS NAME : LogControl
+    //
+    /** Maintain logfile related options.
+     * Singleton
+    */
+    class LogControl
+    {
+      friend std::ostream & operator<<( std::ostream & str, const LogControl & obj );
+      typedef logger::LogControlImpl Impl;
 
-      std::ostream & getStream( const char * group_r,
-                                LogLevel     level_r,
-                                const char * file_r,
-                                const char * func_r,
-                                const int    line_r )
+    public:
+      /** Singleton access. */
+      static LogControl instance();
+      /** Dtor */
+      ~LogControl();
+
+    public:
+      /** Return path to the logfile.
+       * An emty pathname for std::err.
+      */
+      const Pathname & logfile() const;
+
+      /** Set path for the logfile.
+       * An emty pathname for std::err.
+       * \throw if \a logfile_r is not usable.
+      */
+      void logfile( const Pathname & logfile_r );
+
+    public:
+      /** Turn on excessive logging for the lifetime of this object.*/
+      struct TmpExcessive
       {
-        static std::ostream & outStr( getenv("ZYPP_NOLOG") ? noStream()
-                                                           : std::cerr );
-        static std::ostream & fullStr( getenv("ZYPP_FULLLOG") ? outStr
-                                                              : noStream() );
-        return (level_r != E_XXX ? outStr : fullStr )
-                 << str::form( "<%d> [%s] %s(%s):%d ",
-                               level_r, group_r,
-                               file_r, func_r, line_r );
-      }
+        TmpExcessive();
+        ~TmpExcessive();
+      };
 
-      /////////////////////////////////////////////////////////////////
-    } // namespace logger
+    private:
+      /** Default ctor: Singleton*/
+      LogControl();
+       /** Pointer to implementation */
+      RW_pointer<Impl> _pimpl;
+    };
     ///////////////////////////////////////////////////////////////////
 
+    /** \relates LogControl Stream output */
+    std::ostream & operator<<( std::ostream & str, const LogControl & obj );
+
     /////////////////////////////////////////////////////////////////
   } // namespace base
   ///////////////////////////////////////////////////////////////////
   /////////////////////////////////////////////////////////////////
 } // namespace zypp
 ///////////////////////////////////////////////////////////////////
+#endif // ZYPP_BASE_LOGCONTROL_H
index 2577718..91eb364 100644 (file)
@@ -16,6 +16,7 @@ baseinclude_HEADERS = \
        Functional.h    \
        Iterator.h      \
        Logger.h        \
+       LogControl.h    \
        \
        Fd.h            \
        KindOf.h        \
@@ -36,7 +37,7 @@ noinst_LTLIBRARIES =  lib@PACKAGE@_base.la
 ## ##################################################
 
 lib@PACKAGE@_base_la_SOURCES = \
-       Logger.cc       \
+       LogControl.cc   \
        Exception.cc    \
        Fd.cc           \
        Gettext.cc      \