72 openlog ( identity, LOG_CONS|LOG_PID|LOG_NDELAY, LOG_LOCAL7 );
176 va_copy(argcopy, pargs);
177 retval = vsnprintf(NULL, 0, format, argcopy);
197 Malloc( str,
char, (
size_t) len + 1 +
sizeof(
void *) );
200 int r = vsnprintf(str, (
size_t)(len+1), fmt, ap);
202 return free(str), -1;
234void _n_log(
int level,
const char *file,
const char *func,
int line,
const char *format, ... )
248 if( level <= log_level )
251 char *syslogbuffer = NULL ;
252 char *eventbuffer = NULL ;
255 char *name =
"NULL" ;
263 va_start (args, format);
264 vasprintf( &syslogbuffer, format, args );
267 needed = (
unsigned long long)snprintf( NULL, 0,
"start /B EventCreate /t %s /id 666 /l APPLICATION /so %s /d \"%s\" > NUL 2>&1",
prioritynames[ level ] . w_name, name, syslogbuffer );
268 Malloc( eventbuffer,
char, needed + 4 );
269 sprintf( eventbuffer,
"start /B EventCreate /t %s /id 666 /l APPLICATION /so %s /d \"%s\" > NUL 2>&1",
prioritynames[ level ] . w_name, name, syslogbuffer );
270 system( eventbuffer );
272 syslog( level,
"%s->%s:%d %s", file, func, line, syslogbuffer );
278 fprintf( out,
"%s:%jd:%s->%s:%d ",
prioritynames[ level ] . c_name, (intmax_t)time( NULL ), file, func, line );
279 va_start (args, format);
280 vfprintf( out, format, args );
282 fprintf( out,
"\n" );
318 pthread_mutex_init( &(*log) -> LOG_MUTEX, NULL );
320 (*log) -> file = fopen( pathname, opt );
322 if( !(*log) -> file )
341 char str[2048] =
"" ;
346 va_start( arg, pat );
348 vsnprintf( str,
sizeof(str), pat, arg );
352 pthread_mutex_lock( &log -> LOG_MUTEX );
353 fprintf( log -> file,
"%s", str );
354 fflush( log -> file );
355 pthread_mutex_unlock( &log -> LOG_MUTEX );
373 pthread_mutex_lock( &log -> LOG_MUTEX );
374 fflush( log -> file );
375 pthread_mutex_unlock( &log -> LOG_MUTEX );
377 pthread_mutex_destroy( &log -> LOG_MUTEX );
379 fclose( log -> file );
#define FreeNoLog(__ptr)
Free Handler without log.
#define Malloc(__ptr, __struct, __size)
Malloc Handler to get errors and set to 0.
#define __n_assert(__ptr, __ret)
macro to assert things
#define LOG_ALERT
action must be taken immediately
#define LOG_SYSJRNL
to sysjrnl
FILE * get_log_file(void)
return the current log_file
int write_safe_log(TS_LOG *log, char *pat,...)
write to a thread-safe logging file
int open_safe_logging(TS_LOG **log, char *pathname, char *opt)
Open a thread-safe logging file.
#define LOG_EMERG
system is unusable
char * open_sysjrnl(char *identity)
Open connection to syslog or create internals for event log.
#define LOG_FILE
internal, logging to file
void close_sysjrnl(void)
Close syslog connection or clean internals for event log.
#define LOG_DEBUG
debug-level messages
#define LOG_ERR
error conditions
#define LOG_STDERR
internal, default LOG_TYPE
#define LOG_CRIT
critical conditions
int close_safe_logging(TS_LOG *log)
close a thread-safe logging file
int set_log_file(char *file)
Set the logging to a file instead of stderr.
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL )
#define LOG_NOTICE
normal but significant condition
#define LOG_WARNING
warning conditions
#define LOG_NULL
no log output
#define LOG_INFO
informational
void _n_log(int level, const char *file, const char *func, int line, const char *format,...)
Logging function.
int get_log_level(void)
Get the global log level value.
ThreadSafe LOGging structure.
Common headers and low-level hugly functions & define.
static LOG_LEVELS prioritynames[]
array of log levels
char * proc_name
static proc name, for windows event log
int c_val
numeric value of log type
static int LOG_LEVEL
static global maximum wanted log level value
static int LOG_TYPE
static global logging type ( STDERR, FILE, SYSJRNL )
int vasprintf(char **strp, const char *fmt, va_list ap)
snprintf from a va_list, helper for asprintf
int asprintf(char *strp[], const char *fmt,...)
snprintf from a va_list
static FILE * log_file
static FILE handling if logging to file is enabled
char * w_name
event log value
char * c_name
string of log type
int _vscprintf_so(const char *format, va_list pargs)
compute the size of a string made with format 'fmt' and arguments in the va_list 'ap',...
internal struct to handle log types