Annotation of embedaddon/libpdel/sys/alog.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (c) 2001-2002 Packet Design, LLC.
                      4:  * All rights reserved.
                      5:  * 
                      6:  * Subject to the following obligations and disclaimer of warranty,
                      7:  * use and redistribution of this software, in source or object code
                      8:  * forms, with or without modifications are expressly permitted by
                      9:  * Packet Design; provided, however, that:
                     10:  * 
                     11:  *    (i)  Any and all reproductions of the source or object code
                     12:  *         must include the copyright notice above and the following
                     13:  *         disclaimer of warranties; and
                     14:  *    (ii) No rights are granted, in any manner or form, to use
                     15:  *         Packet Design trademarks, including the mark "PACKET DESIGN"
                     16:  *         on advertising, endorsements, or otherwise except as such
                     17:  *         appears in the above copyright notice or in the software.
                     18:  * 
                     19:  * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
                     20:  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
                     21:  * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
                     22:  * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
                     23:  * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
                     24:  * OR NON-INFRINGEMENT.  PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
                     25:  * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
                     26:  * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
                     27:  * RELIABILITY OR OTHERWISE.  IN NO EVENT SHALL PACKET DESIGN BE
                     28:  * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
                     29:  * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
                     30:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
                     31:  * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
                     32:  * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
                     33:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     34:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
                     35:  * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
                     36:  * THE POSSIBILITY OF SUCH DAMAGE.
                     37:  *
                     38:  * Author: Archie Cobbs <archie@freebsd.org>
                     39:  */
                     40: 
                     41: #ifndef _PDEL_SYS_ALOG_H_
                     42: #define _PDEL_SYS_ALOG_H_
                     43: 
                     44: #include <sys/types.h>
                     45: #include <sys/time.h>
                     46: 
                     47: #include <stdarg.h>
                     48: #include <regex.h>
                     49: 
                     50: #ifndef __FreeBSD__
                     51: #define __printflike(x,y)
                     52: #endif
                     53: 
                     54: /*
                     55:  * Simple support for logging channels. Each channel can log to
                     56:  * standard error, local syslog, or remote syslog, and has a minimum
                     57:  * log severity filter.
                     58:  */
                     59: 
                     60: #define ALOG_MAX_CHANNELS      16      /* max number of channels */
                     61: 
                     62: /*
                     63:  * This structure is used to configure a channel.
                     64:  */
                     65: struct alog_config {
                     66:        const char      *path;          /* logfile filename, or NULL for none */
                     67:        const char      *name;          /* syslog id, or null to disable */
                     68:        const char      *facility;      /* syslog facility, null for stderr */
                     69:        struct in_addr  remote_server;  /* remote server, or 0.0.0.0 local */
                     70:        int             min_severity;   /* min severity to actually log */
                     71:        int             histlen;        /* how many history entries to save */
                     72: };
                     73: 
                     74: /* Entries in the log history are returned in this form */
                     75: struct alog_entry {
                     76:        time_t  when;                   /* when event was logged */
                     77:        int     sev;                    /* entry log severity */
                     78:        char    msg[0];                 /* entry contents (including NUL) */
                     79: };
                     80: 
                     81: DEFINE_STRUCTS_ARRAY(alog_history, struct alog_entry *);
                     82: 
                     83: __BEGIN_DECLS
                     84: 
                     85: /*
                     86:  * Initialize or reconfigure a logging channel.
                     87:  *
                     88:  *     channel         Between zero and ALOG_MAX_CHANNELS - 1.
                     89:  *     conf            Channel configuration.
                     90:  */
                     91: extern int     alog_configure(int channel, const struct alog_config *conf);
                     92: 
                     93: /*
                     94:  * Reset a logging channel.
                     95:  */
                     96: extern int     alog_shutdown(int channel);
                     97: 
                     98: /*
                     99:  * Set current logging channel.
                    100:  */
                    101: extern int     alog_set_channel(int channel);
                    102: 
                    103: /*
                    104:  * Enable/disable debugging on a channel. Everything logged to the
                    105:  * channel will be logged to stderr as well.
                    106:  */
                    107: extern void    alog_set_debug(int channel, int enabled);
                    108: 
                    109: /*
                    110:  * Get a selection from the log history.
                    111:  *
                    112:  * The caller's structs array is filled in and is an array of
                    113:  * pointers to struct alog_entry.
                    114:  *
                    115:  * Caller should free the returned array by calling
                    116:  * "structs_free(&alog_history_type, NULL, list)".
                    117:  */
                    118: extern int     alog_get_history(int channel, int min_severity,
                    119:                        int max_entries, time_t max_age,
                    120:                        const regex_t *preg, struct alog_history *list);
                    121: 
                    122: /*
                    123:  * Clear (i.e., forget) log history.
                    124:  */
                    125: extern int     alog_clear_history(int channel);
                    126: 
                    127: /*
                    128:  * Log to the currently active logging channel. Preserves errno.
                    129:  */
                    130: extern void    alog(int sev, const char *fmt, ...) __printflike(2, 3);
                    131: extern void    valog(int sev, const char *fmt,
                    132:                        va_list args) __printflike(2, 0);
                    133: 
                    134: /*
                    135:  * Convert between numeric syslog facility and string.
                    136:  */
                    137: extern int     alog_facility(const char *name);
                    138: const char     *alog_facility_name(int facility);
                    139: 
                    140: /*
                    141:  * Convert between numeric syslog severity and string.
                    142:  */
                    143: extern int     alog_severity(const char *name);
                    144: const char     *alog_severity_name(int sev);
                    145: 
                    146: /*
                    147:  * Expand '%m' in a format string.
                    148:  *
                    149:  * Returns a pointer to a static buffer.
                    150:  */
                    151: extern void    alog_expand(const char *fmt,
                    152:                        int errnum, char *buf, size_t bufsize);
                    153: 
                    154: /* Some useful alog "structs" types */
                    155: extern const struct structs_type       alog_facility_type;
                    156: extern const struct structs_type       alog_severity_type;
                    157: extern const struct structs_type       alog_config_type;
                    158: extern const struct structs_type       alog_history_type;
                    159: 
                    160: __END_DECLS
                    161: 
                    162: /* Handy macro for a common usage */
                    163: #ifdef __GNUC__
                    164: #define alogf(sev, fmt, arg...)        alog(sev, "%s: " fmt, __FUNCTION__ , ## arg)
                    165: #else
                    166: #define alogf                  alog
                    167: #endif
                    168: 
                    169: #endif /* _PDEL_SYS_ALOG_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>