Navigation


Changeset 941:64088de91f7f in freeDiameter for libfdproto


Ignore:
Timestamp:
Jan 20, 2013, 1:42:12 AM (11 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

Initial logging rework by Thomas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdproto/log.c

    r909 r941  
    4444int fd_g_debug_lvl = INFO;
    4545
     46static void fd_internal_logger( int, const char *, va_list );
     47
    4648/* These may be used to pass specific debug requests via the command-line parameters */
    4749char * fd_debug_one_function = NULL;
     
    5355
    5456/* Allow passing of the log and debug information from base stack to extensions */
    55 void (*fd_external_logger)( const char * format, va_list *args ) = NULL;
     57void (*fd_logger)( int loglevel, const char * format, va_list args ) = fd_internal_logger;
    5658
    57 /* Register an dexternal call back for tracing and debug */
    58 int fd_log_handler_register( void (*logger)(const char * format, va_list *args))
     59/* Register an external call back for tracing and debug */
     60int fd_log_handler_register( void (*logger)(int loglevel, const char * format, va_list args) )
    5961{
    6062        CHECK_PARAMS( logger );
    6163
    62         if ( fd_external_logger != NULL )
     64        if ( fd_logger != fd_internal_logger )
    6365        {
    6466               return EALREADY; /* only one registration allowed */
     
    6668        else
    6769        {
    68                fd_external_logger = logger;
     70               fd_logger = logger;
    6971        }
     72
    7073        return 0;
    7174}
     
    7477int fd_log_handler_unregister ( void )
    7578{
    76         fd_external_logger = NULL;
     79        fd_logger = fd_internal_logger;
    7780        return 0; /* Successfull in all cases. */
    7881}
     
    8386}
    8487
     88
     89static void fd_internal_logger( int loglevel, const char *format, va_list ap )
     90{
     91    FILE *fstr = fd_g_debug_fstr ?: stdout;
     92
     93    /* logging has been decided by macros outside already */
     94    vfprintf( fd_g_debug_fstr, format, ap);
     95    fprintf(fd_g_debug_fstr, "\n");
     96    fflush(fd_g_debug_fstr);
     97}
     98
    8599/* Log a debug message */
    86 void fd_log_debug_fstr ( FILE * fstr, const char * format, ... )
     100void fd_log ( int loglevel, const char * format, ... )
    87101{
    88102        va_list ap;
     
    93107       
    94108        va_start(ap, format);
    95         if ( fd_external_logger != NULL )
    96         {
    97                fd_external_logger( format, &ap );
    98         }
    99         else
    100         {
    101                vfprintf( fstr ?: stdout, format, ap);
    102                fflush(fstr ?: stdout);
    103         }
     109        fd_logger(loglevel, format, ap);
    104110        va_end(ap);
    105111
     
    107113       
    108114        (void)pthread_mutex_unlock(&fd_log_lock);
     115}
     116
     117/* Log debug message to file. */
     118void fd_log_debug_fstr( FILE * fstr, const char * format, ... )
     119{
     120        va_list ap;
     121       
     122        va_start(ap, format);
     123        vfprintf(fstr, format, ap);
     124        va_end(ap);
    109125}
    110126
Note: See TracChangeset for help on using the changeset viewer.