blob: 1f9f23cdc08044eea6abf7238fa92e16319af373 [file] [log] [blame]
ajs274a4a42004-12-07 15:39:31 +00001/*
2 * $Id: log.h,v 1.14 2004/12/07 15:39:32 ajs Exp $
3 *
4 * Zebra logging funcions.
paul718e3742002-12-13 20:15:29 +00005 * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
6 *
7 * This file is part of GNU Zebra.
8 *
9 * GNU Zebra is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation; either version 2, or (at your option) any
12 * later version.
13 *
14 * GNU Zebra is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Zebra; see the file COPYING. If not, write to the Free
21 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22 * 02111-1307, USA.
23 */
24
25#ifndef _ZEBRA_LOG_H
26#define _ZEBRA_LOG_H
27
28#include <syslog.h>
29
ajs5e764772004-12-03 19:03:33 +000030/* Here is some guidance on logging levels to use:
31 *
32 * LOG_DEBUG - For all messages that are enabled by optional debugging
33 * features, typically preceded by "if (IS...DEBUG...)"
34 * LOG_INFO - Information that may be of interest, but everything seems
35 * to be working properly.
36 * LOG_NOTICE - Only for message pertaining to daemon startup or shutdown.
37 * LOG_WARNING - Warning conditions: unexpected events, but the daemon believes
38 * it can continue to operate correctly.
39 * LOG_ERR - Error situations indicating malfunctions. Probably require
40 * attention.
41 *
42 * Note: LOG_CRIT, LOG_ALERT, and LOG_EMERG are currently not used anywhere,
43 * please use LOG_ERR instead.
44 */
45
paul718e3742002-12-13 20:15:29 +000046typedef enum
47{
48 ZLOG_NONE,
49 ZLOG_DEFAULT,
50 ZLOG_ZEBRA,
51 ZLOG_RIP,
52 ZLOG_BGP,
53 ZLOG_OSPF,
54 ZLOG_RIPNG,
55 ZLOG_OSPF6,
jardin9e867fe2003-12-23 08:56:18 +000056 ZLOG_ISIS,
paul718e3742002-12-13 20:15:29 +000057 ZLOG_MASC
58} zlog_proto_t;
59
ajs274a4a42004-12-07 15:39:31 +000060/* If maxlvl is set to ZLOG_DISABLED, then no messages will be sent
61 to that logging destination. */
62#define ZLOG_DISABLED (LOG_EMERG-1)
63
64typedef enum
65{
66 ZLOG_DEST_SYSLOG = 0,
67 ZLOG_DEST_STDOUT,
68 ZLOG_DEST_MONITOR,
69 ZLOG_DEST_FILE
70} zlog_dest_t;
71#define ZLOG_NUM_DESTS (ZLOG_DEST_FILE+1)
72
paul718e3742002-12-13 20:15:29 +000073struct zlog
74{
ajs7d149b82004-11-28 23:00:01 +000075 const char *ident; /* daemon name (first arg to openlog) */
paul718e3742002-12-13 20:15:29 +000076 zlog_proto_t protocol;
ajs274a4a42004-12-07 15:39:31 +000077 int maxlvl[ZLOG_NUM_DESTS]; /* maximum priority to send to associated
78 logging destination */
79 int default_lvl; /* maxlvl to use if none is specified */
paul718e3742002-12-13 20:15:29 +000080 FILE *fp;
81 char *filename;
paul718e3742002-12-13 20:15:29 +000082 int facility; /* as per syslog facility */
ajs7d149b82004-11-28 23:00:01 +000083 int record_priority; /* should messages logged through stdio include the
84 priority of the message? */
85 int syslog_options; /* 2nd arg to openlog */
paul718e3742002-12-13 20:15:29 +000086};
87
88/* Message structure. */
89struct message
90{
91 int key;
hassob04c6992004-10-04 19:10:31 +000092 const char *str;
paul718e3742002-12-13 20:15:29 +000093};
94
95/* Default logging strucutre. */
96extern struct zlog *zlog_default;
97
98/* Open zlog function */
ajs274a4a42004-12-07 15:39:31 +000099struct zlog *openzlog (const char *progname, zlog_proto_t protocol,
100 int syslog_options, int syslog_facility);
paul718e3742002-12-13 20:15:29 +0000101
102/* Close zlog function. */
103void closezlog (struct zlog *zl);
104
105/* GCC have printf type attribute check. */
106#ifdef __GNUC__
107#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
108#else
109#define PRINTF_ATTRIBUTE(a,b)
110#endif /* __GNUC__ */
111
112/* Generic function for zlog. */
113void zlog (struct zlog *zl, int priority, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
114
115/* Handy zlog functions. */
116void zlog_err (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
117void zlog_warn (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
118void zlog_info (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
119void zlog_notice (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
120void zlog_debug (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
121
122/* For bgpd's peer oriented log. */
123void plog_err (struct zlog *, const char *format, ...);
124void plog_warn (struct zlog *, const char *format, ...);
125void plog_info (struct zlog *, const char *format, ...);
126void plog_notice (struct zlog *, const char *format, ...);
127void plog_debug (struct zlog *, const char *format, ...);
128
ajs274a4a42004-12-07 15:39:31 +0000129/* Set logging level for the given destination. If the log_level
130 argument is ZLOG_DISABLED, then the destination is disabled.
131 This function should not be used for file logging (use zlog_set_file
132 or zlog_reset_file instead). */
133void zlog_set_level (struct zlog *zl, zlog_dest_t, int log_level);
paul718e3742002-12-13 20:15:29 +0000134
ajs274a4a42004-12-07 15:39:31 +0000135/* Set logging to the given filename at the specified level. */
136int zlog_set_file (struct zlog *zl, const char *filename, int log_level);
137/* Disable file logging. */
paul718e3742002-12-13 20:15:29 +0000138int zlog_reset_file (struct zlog *zl);
139
140/* Rotate log. */
ajsd246bd92004-11-23 17:35:08 +0000141int zlog_rotate (struct zlog *);
paul718e3742002-12-13 20:15:29 +0000142
143/* For hackey massage lookup and check */
144#define LOOKUP(x, y) mes_lookup(x, x ## _max, y)
145
hasso8c328f12004-10-05 21:01:23 +0000146const char *lookup (struct message *, int);
147const char *mes_lookup (struct message *meslist, int max, int index);
paul718e3742002-12-13 20:15:29 +0000148
149extern const char *zlog_priority[];
ajs274a4a42004-12-07 15:39:31 +0000150extern const char *zlog_proto_names[];
paul718e3742002-12-13 20:15:29 +0000151
ajsca359762004-11-19 23:40:16 +0000152/* Safe version of strerror -- never returns NULL. */
153extern const char *safe_strerror(int errnum);
154
ajs59a06a92004-11-23 18:19:14 +0000155/* To be called when a fatal signal is caught. */
156extern void zlog_signal(int signo, const char *action);
157
ajs063ee522004-11-26 18:11:14 +0000158/* Log a backtrace. */
159extern void zlog_backtrace(int priority);
160
161/* Log a backtrace, but in an async-signal-safe way. Should not be
162 called unless the program is about to exit or abort, since it messes
ajsb9c35002004-11-28 23:04:51 +0000163 up the state of zlog file pointers. */
ajs48d6c692004-11-26 20:52:59 +0000164extern void zlog_backtrace_sigsafe(int priority);
ajs063ee522004-11-26 18:11:14 +0000165
ajs274a4a42004-12-07 15:39:31 +0000166/* Defines for use in command construction: */
167
168#define LOG_LEVELS "(emergencies|alerts|critical|errors|warnings|notifications|informational|debugging)"
169
170#define LOG_LEVEL_DESC \
171 "System is unusable\n" \
172 "Immediate action needed\n" \
173 "Critical conditions\n" \
174 "Error conditions\n" \
175 "Warning conditions\n" \
176 "Normal but significant conditions\n" \
177 "Informational messages\n" \
178 "Debugging messages\n"
179
180#define LOG_FACILITIES "(kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7)"
181
182#define LOG_FACILITY_DESC \
183 "Kernel\n" \
184 "User process\n" \
185 "Mail system\n" \
186 "System daemons\n" \
187 "Authorization system\n" \
188 "Syslog itself\n" \
189 "Line printer system\n" \
190 "USENET news\n" \
191 "Unix-to-Unix copy system\n" \
192 "Cron/at facility\n" \
193 "Local use\n" \
194 "Local use\n" \
195 "Local use\n" \
196 "Local use\n" \
197 "Local use\n" \
198 "Local use\n" \
199 "Local use\n" \
200 "Local use\n"
201
paul718e3742002-12-13 20:15:29 +0000202#endif /* _ZEBRA_LOG_H */