2 * UCW Library -- Logging to Syslog
4 * (c) 2009 Martin Mares <mj@ucw.cz>
5 * (c) 2008 Tomas Gavenciak <gavento@ucw.cz>
7 * This software may be freely distributed and used according to the terms
8 * of the GNU Lesser General Public License.
16 /* destructor for syslog logs */
17 static void ls_syslog_close(struct log_stream *ls)
24 /* convert severity level to syslog constants */
25 static int ls_syslog_convert_level(int level)
29 case L_DEBUG: return LOG_DEBUG;
30 case L_INFO: return LOG_INFO;
31 case L_INFO_R: return LOG_INFO;
32 case L_WARN: return LOG_WARNING;
33 case L_WARN_R: return LOG_WARNING;
34 case L_ERROR: return LOG_ERR;
35 case L_ERROR_R: return LOG_ERR;
36 case L_FATAL: return LOG_CRIT;
37 default: return LOG_NOTICE;
41 /* simple syslog write handler */
42 static int ls_syslog_handler(struct log_stream *ls, const char *m, u32 flags)
48 prio = ls_syslog_convert_level(LS_GET_LEVEL(flags)) | (ls->idata);
50 syslog(prio | (ls->idata), "%s: %s", ls->name, m);
52 syslog(prio | (ls->idata), "%s", m);
56 /* assign log to a syslog facility */
57 /* initialize with no formatting (syslog adds these inforamtion) */
58 /* name is optional prefix (NULL for none) */
59 struct log_stream *ls_syslog_new(int facility, const char *name)
61 struct log_stream *ls=ls_new();
62 if (name) ls->name = xstrdup(name);
64 ls->msgfmt = LSFMT_NONE;
65 ls->handler = ls_syslog_handler;
66 ls->close = ls_syslog_close;