Imported Upstream version 17.8.0
[platform/upstream/libzypp.git] / zypp / base / Logger.h
index 8e3ca62..ca3bac6 100644 (file)
 */
 #ifndef ZYPP_BASE_LOGGER_H
 #define ZYPP_BASE_LOGGER_H
-
+#include <cstring>
 #include <iosfwd>
+#include <string>
+
+///////////////////////////////////////////////////////////////////
+#ifdef ZYPP_NDEBUG
+#define OSDLOG( MSG )
+#define OSMLOG( L, MSG )
+#define TRACELEAVE
+#else
+namespace zypp
+{
+  namespace debug
+  {
+    void osdlog( const std::string & msg_r, unsigned level_r );        // LogControl.cc
+
+    struct TraceLeave  // LogControl.cc
+    {
+      TraceLeave( const TraceLeave & ) =delete;
+      TraceLeave & operator=( const TraceLeave & ) =delete;
+      TraceLeave( const char * file_r, const char *  fnc_r, int line_r );
+      ~TraceLeave();
+    private:
+      static unsigned _depth;
+      const char *    _file;
+      const char *    _fnc;
+      int             _line;
+    };
+  }
+}
+#define OSDLOG( MSG )    ::zypp::debug::osdlog( MSG, 0 )
+#define OSMLOG( L, MSG ) ::zypp::debug::osdlog( MSG, L )
+#define TRACELEAVE       ::zypp::debug::TraceLeave _TraceLeave( __FILE__, __FUNCTION__, __LINE__ )
+#endif // ZYPP_NDEBUG
+///////////////////////////////////////////////////////////////////
 
 /** \defgroup ZYPP_BASE_LOGGER_MACROS ZYPP_BASE_LOGGER_MACROS
  *  Convenience macros for logging.
@@ -21,7 +54,7 @@
  * to return the log stream.
  *
  * @code
- * _DBG("foo") << ....
+ * L_DBG("foo") << ....
  * @endcode
  * Logs a debug message for group @a "foo".
  *
 #define ZYPP_BASE_LOGGER_LOGGROUP "DEFINE_LOGGROUP"
 #endif
 
-#define XXX _XXX( ZYPP_BASE_LOGGER_LOGGROUP )
-#define DBG _DBG( ZYPP_BASE_LOGGER_LOGGROUP )
-#define MIL _MIL( ZYPP_BASE_LOGGER_LOGGROUP )
-#define WAR _WAR( ZYPP_BASE_LOGGER_LOGGROUP )
-#define ERR _ERR( ZYPP_BASE_LOGGER_LOGGROUP )
-#define SEC _SEC( ZYPP_BASE_LOGGER_LOGGROUP )
-#define INT _INT( ZYPP_BASE_LOGGER_LOGGROUP )
-#define USR _USR( ZYPP_BASE_LOGGER_LOGGROUP )
+#define XXX L_XXX( ZYPP_BASE_LOGGER_LOGGROUP )
+#define DBG L_DBG( ZYPP_BASE_LOGGER_LOGGROUP )
+#define MIL L_MIL( ZYPP_BASE_LOGGER_LOGGROUP )
+#define WAR L_WAR( ZYPP_BASE_LOGGER_LOGGROUP )
+#define ERR L_ERR( ZYPP_BASE_LOGGER_LOGGROUP )
+#define SEC L_SEC( ZYPP_BASE_LOGGER_LOGGROUP )
+#define INT L_INT( ZYPP_BASE_LOGGER_LOGGROUP )
+#define USR L_USR( ZYPP_BASE_LOGGER_LOGGROUP )
+
+#define L_XXX(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_XXX )
+#define L_DBG(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP"++", zypp::base::logger::E_MIL )
+#define L_MIL(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_MIL )
+#define L_WAR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_WAR )
+#define L_ERR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_ERR )
+#define L_SEC(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_SEC )
+#define L_INT(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_INT )
+#define L_USR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_USR )
 
-#define _XXX(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_XXX )
-#define _DBG(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_DBG )
-#define _MIL(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_MIL )
-#define _WAR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_WAR )
-#define _ERR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_ERR )
-#define _SEC(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_SEC )
-#define _INT(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_INT )
-#define _USR(GROUP) ZYPP_BASE_LOGGER_LOG( GROUP, zypp::base::logger::E_USR )
+#define L_BASEFILE ( *__FILE__ == '/' ? strrchr( __FILE__, '/' ) + 1 : __FILE__ )
 
 /** Actual call to @ref getStream. */
 #define ZYPP_BASE_LOGGER_LOG(GROUP,LEVEL) \
-        zypp::base::logger::getStream( GROUP, LEVEL, __FILE__, __FUNCTION__, __LINE__ )
+        zypp::base::logger::getStream( GROUP, LEVEL, L_BASEFILE, __FUNCTION__, __LINE__ )
 
 /*@}*/
 
@@ -81,14 +116,14 @@ namespace zypp
        * @see getStream
       */
       enum LogLevel {
-        E_XXX = -1, /**< Excessive logging. */
-        E_DBG = 0,  /**< Debug or verbose. */
-        E_MIL,      /**< Milestone. */
-        E_WAR,      /**< Warning. */
-        E_ERR,      /**< Error. */
-        E_SEC,      /**< Secutrity related. */
-        E_INT,      /**< Internal error. */
-        E_USR       /**< User log. */
+        E_XXX = 999, /**< Excessive logging. */
+        E_DBG = 0,   /**< Debug or verbose. */
+        E_MIL,       /**< Milestone. */
+        E_WAR,       /**< Warning. */
+        E_ERR,       /**< Error. */
+        E_SEC,       /**< Secutrity related. */
+        E_INT,       /**< Internal error. */
+        E_USR        /**< User log. */
       };
 
       /** Return a log stream to write on.
@@ -106,6 +141,7 @@ namespace zypp
                                        const char * file_r,
                                        const char * func_r,
                                        const int    line_r );
+      extern bool isExcessive();
 
       /////////////////////////////////////////////////////////////////
     } // namespace logger