]> git.sur5r.net Git - openldap/commitdiff
add severity-aware logging (ITS#4282)
authorPierangelo Masarati <ando@openldap.org>
Tue, 27 Dec 2005 16:29:37 +0000 (16:29 +0000)
committerPierangelo Masarati <ando@openldap.org>
Tue, 27 Dec 2005 16:29:37 +0000 (16:29 +0000)
configure
configure.in
include/ldap_log.h
include/portable.hin
libraries/liblber/debug.c
servers/slapd/main.c
servers/slapd/slap.h

index f531e94234836dbda086f38c6aab018355893320..26696d6ff678716e98c449b21d15d12a5083edef 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in OpenLDAP: pkg/ldap/configure.in,v 1.609 2005/11/26 16:04:57 ando Exp .
+# From configure.in OpenLDAP: pkg/ldap/configure.in,v 1.610 2005/12/16 15:52:59 ando Exp .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59.
 #
@@ -1006,7 +1006,7 @@ if test -n "$ac_init_help"; then
 Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-debug         enable debugging [yes]
+  --enable-debug         enable debugging no|yes|traditional [yes]
   --enable-dynamic       enable linking built binaries with dynamic libs [no]
   --enable-syslog        enable syslog support [auto]
   --enable-proctitle     enable proctitle support [yes]
@@ -2176,7 +2176,7 @@ if test "${enable_debug+set}" = set; then
   enableval="$enable_debug"
 
        ol_arg=invalid
-       for ol_val in auto yes no ; do
+       for ol_val in no yes traditional ; do
                if test "$enableval" = "$ol_val" ; then
                        ol_arg="$ol_val"
                fi
@@ -44024,6 +44024,13 @@ _ACEOF
 fi
 
 if test "$ol_enable_debug" != no ; then
+       if test "$ol_enable_debug" = traditional; then
+
+cat >>confdefs.h <<\_ACEOF
+#define OLD_DEBUG 1
+_ACEOF
+
+       fi
 
 cat >>confdefs.h <<\_ACEOF
 #define LDAP_DEBUG 1
index 4998dc195d100ac239065de556266bb2b73554cc..cde34c5c87329884e796ff896a020c53aff85d40 100644 (file)
@@ -222,7 +222,8 @@ AC_SUBST(ldap_subdir)dnl
 
 dnl ----------------------------------------------------------------
 dnl General "enable" options
-OL_ARG_ENABLE(debug,[  --enable-debug    enable debugging], yes)dnl
+dnl set default to traditional to enable the original debug style
+OL_ARG_ENABLE(debug,[  --enable-debug    enable debugging], yes, [no yes traditional])dnl
 OL_ARG_ENABLE(dynamic,[  --enable-dynamic        enable linking built binaries with dynamic libs], no)dnl
 OL_ARG_ENABLE(syslog,[  --enable-syslog          enable syslog support], auto)dnl
 OL_ARG_ENABLE(proctitle,[  --enable-proctitle    enable proctitle support], yes)dnl
@@ -2640,6 +2641,10 @@ if test "$ol_enable_slapi" != no ; then
 fi
 
 if test "$ol_enable_debug" != no ; then
+       if test "$ol_enable_debug" = traditional; then
+               AC_DEFINE(OLD_DEBUG,1,
+                       [define to use the original debug style])
+       fi
        AC_DEFINE(LDAP_DEBUG,1,
                [define this to add debugging code])
 fi
index 12ec9e326f161dc2382e53f42262dbee134a3dbd..84f886e324c99a45ed2a7ea66cb930ef08f1cf4f 100644 (file)
@@ -23,8 +23,8 @@
  * is provided ``as is'' without express or implied warranty.
  */
 
-#ifndef _LDAP_LOG_H
-#define _LDAP_LOG_H
+#ifndef LDAP_LOG_H
+#define LDAP_LOG_H
 
 #include <stdio.h>
 #include <ldap_cdefs.h>
@@ -39,19 +39,71 @@ LDAP_BEGIN_DECL
  * debugging levels begin with LDAP_LEVEL_ENTRY
  *
  */
-#define LDAP_LEVEL_EMERG       0
-#define LDAP_LEVEL_ALERT       1
-#define LDAP_LEVEL_CRIT        2
-#define LDAP_LEVEL_ERR         3
-#define LDAP_LEVEL_WARNING     4
-#define LDAP_LEVEL_NOTICE      5
-#define LDAP_LEVEL_INFO        6
-#define LDAP_LEVEL_ENTRY       7  /* log function entry points */
-#define LDAP_LEVEL_ARGS        8  /* log function call parameters */
-#define LDAP_LEVEL_RESULTS     9  /* Log function results */
-#define LDAP_LEVEL_DETAIL1    10  /* log level 1 function operational details */
-#define LDAP_LEVEL_DETAIL2    11  /* Log level 2 function operational details */
 
+/*
+ * The "OLD_DEBUG" means that all logging occurs at LOG_DEBUG
+ */
+
+#ifdef OLD_DEBUG
+/* original behavior: all logging occurs at the same severity level */
+#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
+#define LDAP_LEVEL_EMERG       ldap_syslog_level
+#define LDAP_LEVEL_ALERT       ldap_syslog_level
+#define LDAP_LEVEL_CRIT                ldap_syslog_level
+#define LDAP_LEVEL_ERR         ldap_syslog_level
+#define LDAP_LEVEL_WARNING     ldap_syslog_level
+#define LDAP_LEVEL_NOTICE      ldap_syslog_level
+#define LDAP_LEVEL_INFO                ldap_syslog_level
+#define LDAP_LEVEL_DEBUG       ldap_syslog_level
+#else /* !LDAP_DEBUG || !LDAP_SYSLOG */
+#define LDAP_LEVEL_EMERG       (7)
+#define LDAP_LEVEL_ALERT       (7)
+#define LDAP_LEVEL_CRIT                (7)
+#define LDAP_LEVEL_ERR         (7)
+#define LDAP_LEVEL_WARNING     (7)
+#define LDAP_LEVEL_NOTICE      (7)
+#define LDAP_LEVEL_INFO                (7)
+#define LDAP_LEVEL_DEBUG       (7)
+#endif /* !LDAP_DEBUG || !LDAP_SYSLOG */
+
+#else /* ! OLD_DEBUG */
+/* map syslog onto LDAP severity levels */
+#ifdef LOG_DEBUG
+#define LDAP_LEVEL_EMERG       LOG_EMERG
+#define LDAP_LEVEL_ALERT       LOG_ALERT
+#define LDAP_LEVEL_CRIT                LOG_CRIT
+#define LDAP_LEVEL_ERR         LOG_ERR
+#define LDAP_LEVEL_WARNING     LOG_WARNING
+#define LDAP_LEVEL_NOTICE      LOG_NOTICE
+#define LDAP_LEVEL_INFO                LOG_INFO
+#define LDAP_LEVEL_DEBUG       LOG_DEBUG
+#else /* ! LOG_DEBUG */
+#define LDAP_LEVEL_EMERG       (0)
+#define LDAP_LEVEL_ALERT       (1)
+#define LDAP_LEVEL_CRIT                (2)
+#define LDAP_LEVEL_ERR         (3)
+#define LDAP_LEVEL_WARNING     (4)
+#define LDAP_LEVEL_NOTICE      (5)
+#define LDAP_LEVEL_INFO                (6)
+#define LDAP_LEVEL_DEBUG       (7)
+#endif /* ! LOG_DEBUG */
+#endif /* ! OLD_DEBUG */
+#if 0
+/* in case we need to reuse the unused bits of severity */
+#define        LDAP_LEVEL_MASK(s)      ((s) & 0x7)
+#else
+#define        LDAP_LEVEL_MASK(s)      (s)
+#endif
+
+/* (yet) unused */
+#define LDAP_LEVEL_ENTRY       (0x08)  /* log function entry points */
+#define LDAP_LEVEL_ARGS                (0x10)  /* log function call parameters */
+#define LDAP_LEVEL_RESULTS     (0x20)  /* Log function results */
+#define LDAP_LEVEL_DETAIL1     (0x40)  /* log level 1 function operational details */
+#define LDAP_LEVEL_DETAIL2     (0x80)  /* Log level 2 function operational details */
+/* end of (yet) unused */
+
+/* original subsystem selection mechanism */
 #define LDAP_DEBUG_TRACE       0x0001
 #define LDAP_DEBUG_PACKETS     0x0002
 #define LDAP_DEBUG_ARGS                0x0004
@@ -79,48 +131,103 @@ LDAP_BEGIN_DECL
      * This is a bogus extern declaration for the compiler. No need to ensure
      * a 'proper' dllimport.
      */
-#   ifndef ldap_debug
-     extern int        ldap_debug;
-#   endif /* !ldap_debug */
+#ifndef ldap_debug
+extern int     ldap_debug;
+#endif /* !ldap_debug */
 
-#   ifdef LDAP_SYSLOG
-    extern int ldap_syslog;
-    extern int ldap_syslog_level;
+#ifdef LDAP_SYSLOG
+extern int     ldap_syslog;
+extern int     ldap_syslog_level;
 
-#      ifdef HAVE_EBCDIC
-#      define syslog   eb_syslog
-       extern void eb_syslog(int pri, const char *fmt, ...);
-#      endif
+#ifdef HAVE_EBCDIC
+#define syslog eb_syslog
+extern void eb_syslog(int pri, const char *fmt, ...);
+#endif /* HAVE_EBCDIC */
 
-#   endif /* LDAP_SYSLOG */
+#endif /* LDAP_SYSLOG */
 
 /* this doesn't below as part of ldap.h */
-#   ifdef LDAP_SYSLOG
-#   define Debug( level, fmt, arg1, arg2, arg3 )       \
+#ifdef LDAP_SYSLOG
+#define Log1( level, severity, fmt, arg1 )     \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1) ); \
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (arg1) ); \
+       } while ( 0 )
+#define Log2( level, severity, fmt, arg1, arg2 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2) ); \
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (arg1), (arg2) ); \
+       } while ( 0 )
+#define Log3( level, severity, fmt, arg1, arg2, arg3 ) \
        do { \
                if ( ldap_debug & (level) ) \
                        lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3) ); \
                if ( ldap_syslog & (level) ) \
-                       syslog( ldap_syslog_level, (fmt), (arg1), (arg2), (arg3) ); \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (arg1), (arg2), (arg3) ); \
+       } while ( 0 )
+#define Log4( level, severity, fmt, arg1, arg2, arg3, arg4 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3), (arg4) ); \
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (arg1), (arg2), (arg3), (arg4) ); \
+       } while ( 0 )
+#define Log5( level, severity, fmt, arg1, arg2, arg3, arg4, arg5 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3), (arg4), (arg5) ); \
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (arg1), (arg2), (arg3), (arg4), (arg5) ); \
        } while ( 0 )
+#define Debug( level, fmt, arg1, arg2, arg3 )  \
+       Log3( (level), ldap_syslog_level, (fmt), (arg1), (arg2), (arg3) )
+#define LogTest(level) ( ( ldap_debug | ldap_syslog ) & (level) )
 
-#   else
-#       define Debug( level, fmt, arg1, arg2, arg3 ) \
+#else /* ! LDAP_SYSLOG */
+#define Log1( level, severity, fmt, arg1 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1) ); \
+       } while ( 0 )
+#define Log2( level, severity, fmt, arg1, arg2 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2) ); \
+       } while ( 0 )
+#define Log3( level, severity, fmt, arg1, arg2, arg3 ) \
        do { \
                if ( ldap_debug & (level) ) \
                        lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3) ); \
        } while ( 0 )
-#   endif
-
-#else /* LDAP_DEBUG */
-#   define Debug( level, fmt, arg1, arg2, arg3 )
-
-#endif /* LDAP_DEBUG */
-
-#ifndef LDAP_LOG
-#define LDAP_LOG(a, b, fmt, arg1, arg2, arg3)
-#define LDAP_LOGS_TEST(a, b) 0
-#endif
+#define Log4( level, severity, fmt, arg1, arg2, arg3, arg4 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3), (arg4) ); \
+       } while ( 0 )
+#define Log5( level, severity, fmt, arg1, arg2, arg3, arg4, arg5 ) \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       lutil_debug( ldap_debug, (level), (fmt), (arg1), (arg2), (arg3), (arg4), (arg5) ); \
+       } while ( 0 )
+#define Debug( level, fmt, arg1, arg2, arg3 ) \
+               Log3( (level), (fmt), (arg1), (arg2), (arg3) )
+#define LogTest(level) ( ldap_debug & (level) )
+#endif /* ! LDAP_SYSLOG */
+#else /* ! LDAP_DEBUG */
+/* TODO: in case LDAP_DEBUG is undefined, make sure logs with appropriate
+ * severity gets thru anyway */
+#define Log1( level, severity, fmt, arg1 )
+#define Log2( level, severity, fmt, arg1, arg2 )
+#define Log3( level, severity, fmt, arg1, arg2, arg3 )
+#define Log4( level, severity, fmt, arg1, arg2, arg3, arg4 )
+#define Log5( level, severity, fmt, arg1, arg2, arg3, arg4, arg5 )
+#define Debug( level, fmt, arg1, arg2, arg3 )
+#define LogTest(level) ( 0 )
+#endif /* ! LDAP_DEBUG */
 
 LDAP_LUTIL_F(int) lutil_debug_file LDAP_P(( FILE *file ));
 
@@ -130,4 +237,4 @@ LDAP_LUTIL_F(void) lutil_debug LDAP_P((
 
 LDAP_END_DECL
 
-#endif /* _LDAP_LOG_H */
+#endif /* LDAP_LOG_H */
index 7a66d3a100d1da3baab44c98100157872d36c8cc..6058195fe6c35d446b5d1f3b675ba37628b96446 100644 (file)
 /* define if you have (or want) no threads */
 #undef NO_THREADS
 
+/* define to use the original debug style */
+#undef OLD_DEBUG
+
 /* Package */
 #undef OPENLDAP_PACKAGE
 
index de6f947145baef3575e5b8fac6ceba184a233631..f61df96f97d59d0a03fe99c1f701edc7974cd857 100644 (file)
 
 static FILE *log_file = NULL;
 
-#ifdef LDAP_SYSLOG
-static int use_syslog = 0;
-
-static int debug2syslog(int l) {
-       switch (l) {
-       case LDAP_LEVEL_EMERG: return LOG_EMERG;
-       case LDAP_LEVEL_ALERT: return LOG_ALERT;
-       case LDAP_LEVEL_CRIT: return LOG_CRIT;
-       case LDAP_LEVEL_ERR: return LOG_ERR;
-       case LDAP_LEVEL_WARNING: return LOG_WARNING;
-       case LDAP_LEVEL_NOTICE: return LOG_NOTICE;
-       case LDAP_LEVEL_INFO: return LOG_INFO;
-       }
-       return LOG_DEBUG;
-}
-#endif
-
 int lutil_debug_file( FILE *file )
 {
        log_file = file;
index 088a590bfef1d93e01a1fe3c1db9cbfe12ed2c25..7295ad853d572c51cc8c1f8d8fdea7b756237d76 100644 (file)
@@ -182,7 +182,9 @@ parse_syslog_user( const char *arg, int *syslogUser )
        int i = verb_to_mask( optarg, syslogUsers );
 
        if ( BER_BVISNULL( &syslogUsers[ i ].word ) ) {
-               Debug( LDAP_DEBUG_ANY, "unrecognized syslog user \"%s\".\n", optarg, 0, 0 );
+               Debug( LDAP_DEBUG_ANY,
+                       "unrecognized syslog user \"%s\".\n",
+                       optarg, 0, 0 );
                return 1;
        }
 
@@ -192,6 +194,33 @@ parse_syslog_user( const char *arg, int *syslogUser )
 }
 #endif /* LOG_LOCAL4 */
 
+static int
+parse_syslog_level( const char *arg, int *levelp )
+{
+       static slap_verbmasks   str2syslog_level[] = {
+               { BER_BVC( "EMERG" ),   LOG_EMERG },
+               { BER_BVC( "ALERT" ),   LOG_ALERT },
+               { BER_BVC( "CRIT" ),    LOG_CRIT },
+               { BER_BVC( "ERR" ),     LOG_ERR },
+               { BER_BVC( "WARNING" ), LOG_WARNING },
+               { BER_BVC( "NOTICE" ),  LOG_NOTICE },
+               { BER_BVC( "INFO" ),    LOG_INFO },
+               { BER_BVC( "DEBUG" ),   LOG_DEBUG },
+               { BER_BVNULL, 0 }
+       };
+       int i = verb_to_mask( arg, str2syslog_level );
+       if ( BER_BVISNULL( &str2syslog_level[ i ].word ) ) {
+               Debug( LDAP_DEBUG_ANY,
+                       "unknown syslog level \"%s\".\n",
+                       arg, 0, 0 );
+               return 1;
+       }
+       
+       *levelp = str2syslog_level[ i ].mask;
+
+       return 0;
+}
+
 int
 parse_debug_level( const char *arg, int *levelp )
 {
@@ -400,11 +429,14 @@ int main( int argc, char **argv )
 #ifdef HAVE_CHROOT
                                "r:"
 #endif
+#ifdef LDAP_SYSLOG
+                               "S:"
+#endif
 #ifdef LOG_LOCAL4
-                            "l:"
+                               "l:"
 #endif
 #if defined(HAVE_SETUID) && defined(HAVE_SETGID)
-                            "u:g:"
+                               "u:g:"
 #endif
                             )) != EOF ) {
                switch ( i ) {
@@ -514,6 +546,14 @@ int main( int argc, char **argv )
                        }
                        break;
 
+#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
+               case 'S':
+                       if ( parse_syslog_level( optarg, &ldap_syslog_level ) ) {
+                               goto destroy;
+                       }
+                       break;
+#endif /* LDAP_DEBUG && LDAP_SYSLOG */
+
 #ifdef LOG_LOCAL4
                case 'l':       /* set syslog local user */
                        if ( parse_syslog_user( optarg, &syslogUser ) ) {
index 8392477e719f2fa08e7985661b41f8b697b65ed1..bb6a91ff517b4d5e44d7a78cf798c4692d2c4e0d 100644 (file)
@@ -2675,16 +2675,75 @@ typedef struct slap_conn {
 } Connection;
 
 #if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG)
-#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \
+#define Statslog1( level, severity, fmt, connid, opid, arg1 )  \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1) );\
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (connid), (opid), \
+                               (arg1) ); \
+       } while (0)
+#define Statslog2( level, severity, fmt, connid, opid, arg1, arg2 )    \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2) );\
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (connid), (opid), \
+                               (arg1), (arg2) ); \
+       } while (0)
+#define Statslog3( level, severity, fmt, connid, opid, arg1, arg2, arg3 )      \
        do { \
                if ( ldap_debug & (level) ) \
                        fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3) );\
                if ( ldap_syslog & (level) ) \
-                       syslog( ldap_syslog_level, (fmt), (connid), (opid), (arg1), \
-                               (arg2), (arg3) ); \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (connid), (opid), \
+                               (arg1), (arg2), (arg3) ); \
+       } while (0)
+#define Statslog4( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4 )        \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3), (arg4) );\
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (connid), (opid), \
+                               (arg1), (arg2), (arg3), (arg4) ); \
+       } while (0)
+#define Statslog5( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4, arg5 )  \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3), (arg4), (arg5) );\
+               if ( ldap_syslog & (level) ) \
+                       syslog( LDAP_LEVEL_MASK((severity)), (fmt), (connid), (opid), \
+                               (arg1), (arg2), (arg3), (arg4), (arg5) ); \
        } while (0)
+#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \
+       Statslog3( (level), ldap_syslog_level, (fmt), (connid), (opid), (arg1), (arg2), (arg3) )
 #define StatslogTest( level ) ((ldap_debug | ldap_syslog) & (level))
 #elif defined(LDAP_DEBUG)
+#define Statslog1( level, severity, fmt, connid, opid, arg1 )  \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1) );\
+       } while (0)
+#define Statslog2( level, severity, fmt, connid, opid, arg1, arg2 )    \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2) );\
+       } while (0)
+#define Statslog3( level, severity, fmt, connid, opid, arg1, arg2, arg3 )      \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3) );\
+       } while (0)
+#define Statslog4( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4 )        \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3), (arg4) );\
+       } while (0)
+#define Statslog5( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4, arg5 )  \
+       do { \
+               if ( ldap_debug & (level) ) \
+                       fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3), (arg4), (arg5) );\
+       } while (0)
 #define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \
        do { \
                if ( ldap_debug & (level) ) \
@@ -2692,6 +2751,11 @@ typedef struct slap_conn {
        } while (0)
 #define StatslogTest( level ) (ldap_debug & (level))
 #else
+#define Statslog1( level, severity, fmt, connid, opid, arg1 )
+#define Statslog2( level, severity, fmt, connid, opid, arg1, arg2 )
+#define Statslog3( level, severity, fmt, connid, opid, arg1, arg2, arg3 )
+#define Statslog4( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4 )
+#define Statslog5( level, severity, fmt, connid, opid, arg1, arg2, arg3, arg4, arg5 )
 #define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 )
 #define StatslogTest( level ) (0)
 #endif