view src/log.c @ 194:a4e9a20e50e5 noffle

[svn] * docs/noffle.conf.5,src/configfile.c,src/filter.h,src/filter.c: Contrary to the documentation, the action of a filter if not specified was 'full'. Add a new 'default' action which makes the action that of the group's subscription mode. Make this the default action, and allow 'default' to be specified explicitly as the action in the filter definition. Adapted from patch submitted by Mirko Liss. Thanks, Mirko. * docs/noffle.conf.5: Correct small typo.
author bears
date Tue, 30 Oct 2001 12:42:13 +0000
parents fed1334d766b
children 755e03bc7dcf
line wrap: on
line source

/*
  log.c

  $Id: log.c 300 2001-08-05 08:24:22Z bears $
*/

#if HAVE_CONFIG_H
#include <config.h>
#endif

#include <syslog.h>
#include <stdarg.h>
#include "common.h"
#include "log.h"
#include "portable.h"

#define MAXLENGTH 240

#define	DEFAULT_DBG_MASK	LOG_DBG_NONE

struct
{
    Bool interactive;
    unsigned debugMask;
} log = { FALSE, DEFAULT_DBG_MASK };

void
Log_init( const char *name, Bool interactive, int facility )
{
    int option = LOG_PID | LOG_CONS;

    log.interactive = interactive;
    openlog( name, option, facility );
}

#define DO_LOG( LEVEL )               \
    va_list ap;                       \
    Str t;                            \
                                      \
    va_start( ap, fmt );              \
    vsnprintf( t, MAXCHAR, fmt, ap ); \
    if ( MAXLENGTH < MAXCHAR )        \
        t[ MAXLENGTH ] = '\0';        \
    syslog( LEVEL, "%s", t );         \
    if ( log.interactive )            \
        fprintf( stderr, "%s\n", t );   \
    va_end( ap );

void
Log_inf( const char *fmt, ... )
{
    DO_LOG( LOG_INFO );
}

void
Log_err( const char *fmt, ... )
{
    DO_LOG( LOG_ERR );
}

/* Ensure the condition "cond" is true; otherwise log an error and return 1 */
int 
Log_check(int cond, const char *fmt, ... )
{
  if (!cond) {
    DO_LOG( LOG_ERR );
    return 1;
  }
  return 0;
}

void
Log_ntc( const char *fmt, ... )
{
    DO_LOG( LOG_NOTICE );
}

void
Log_dbg( unsigned subsystem, const char *fmt, ... )
{
    if ( ( subsystem & log.debugMask ) != 0 ) {
	DO_LOG( LOG_DEBUG );
    }
}

void
Log_setDbgMask( unsigned mask )
{
    /* A non-zero mask always include Noffle logs */
    if ( mask != 0 )
	mask |= LOG_DBG_NOFFLE;

    log.debugMask = mask;
}