Added a rudimentary yet very easy to use logger; can log to one or more targets at...
[pandora-libraries.git] / include / pnd_logger.h
1
2 #ifndef h_pnd_logger_h
3 #define h_pnd_logger_h
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #include <stdio.h>
10
11 /* rudimentary logger; note that this is meant to be a no-brainer to use, so no setup is needed.
12  */
13
14 // defaults will have no filtering, so any message will be emitted to all targets
15 // default target is nothing, however, so logger is silent unless activated
16 unsigned char pnd_log ( unsigned char level, char *format, ... );           // returns true if emitted; \n is implied!
17 unsigned char pnd_log_to_stdout ( void );                                   // same as pnd_log_to_stream ( stdout );
18 unsigned char pnd_log_to_stderr ( void );                                   // same as pnd_log_to_stream ( stderr );
19
20 /* the below is all optional, for when you need more control
21  */
22
23 // logging is additive; you can log to multiple targets at once. Returns 'true' if accepted, false if could not set up.
24 void pnd_log_to_nil ( void );                                               // stop logging to anywhere; does not close streams/etc
25 unsigned char pnd_log_to_stream ( FILE * );                                 // 'stdout', 'stderr', or your own FILE* are good values
26 unsigned char pnd_log_to_syslog ( char *facility );                         // NYI
27 typedef void (*pnd_log_callback_f)( char *text, void *userdata );
28 unsigned char pnd_log_to_callback ( pnd_log_callback_f f, void *userdata ); // NYI
29
30 // pass NULL to free any pre-text, otherwise it'll be kept. Passed in string is duplicated, so you may free yours if you like.
31 void pnd_log_set_pretext ( char * );                                        // example: your app-name, or app+function-names, say.
32
33 // set a 'filter level'; any log message of higher-or-equal level than current filter-level will be emitted. Thus, to remove filters
34 // just set to level 0. Returns existing setting.
35 unsigned char pnd_log_set_filter ( unsigned char newlevel );                // ex: app-specific enum/#defines for your levels
36
37 // how many targets can be opened, entirely? this is a compile time limit, for sanity.
38 unsigned char pnd_log_max_targets ( void );
39
40 #ifdef __cplusplus
41 } /* "C" */
42 #endif
43
44 #endif