pjdlog.h revision 243750
190075Sobrien/*- 2169689Skan * Copyright (c) 2009-2010 The FreeBSD Foundation 3132718Skan * Copyright (c) 2011 Pawel Jakub Dawidek <pjd@FreeBSD.org> 490075Sobrien * All rights reserved. 5132718Skan * 690075Sobrien * This software was developed by Pawel Jakub Dawidek under sponsorship from 7132718Skan * the FreeBSD Foundation. 890075Sobrien * 9132718Skan * Redistribution and use in source and binary forms, with or without 1090075Sobrien * modification, are permitted provided that the following conditions 1190075Sobrien * are met: 1290075Sobrien * 1. Redistributions of source code must retain the above copyright 1390075Sobrien * notice, this list of conditions and the following disclaimer. 14132718Skan * 2. Redistributions in binary form must reproduce the above copyright 1590075Sobrien * notice, this list of conditions and the following disclaimer in the 1690075Sobrien * documentation and/or other materials provided with the distribution. 1790075Sobrien * 1890075Sobrien * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 1990075Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20132718Skan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21169689Skan * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 22169689Skan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2390075Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2490075Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2590075Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26132718Skan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27132718Skan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2890075Sobrien * SUCH DAMAGE. 2990075Sobrien * 3090075Sobrien * $P4: //depot/projects/trustedbsd/openbsm/bin/auditdistd/pjdlog.h#1 $ 3190075Sobrien */ 3290075Sobrien 3390075Sobrien#ifndef _PJDLOG_H_ 3490075Sobrien#define _PJDLOG_H_ 3590075Sobrien 3690075Sobrien#include <sys/cdefs.h> 3790075Sobrien 3890075Sobrien#include <stdarg.h> 3990075Sobrien#include <sysexits.h> 4090075Sobrien#include <syslog.h> 4190075Sobrien 4290075Sobrien#include <compat/compat.h> 4390075Sobrien 4490075Sobrien#define PJDLOG_MODE_STD 0 4590075Sobrien#define PJDLOG_MODE_SYSLOG 1 4690075Sobrien 4790075Sobrienvoid pjdlog_init(int mode); 4890075Sobrienvoid pjdlog_fini(void); 4990075Sobrien 5096263Sobrienvoid pjdlog_mode_set(int mode); 51132718Skanint pjdlog_mode_get(void); 52117395Skan 53132718Skanvoid pjdlog_debug_set(int level); 54169689Skanint pjdlog_debug_get(void); 55169689Skan 56169689Skanvoid pjdlog_prefix_set(const char *fmt, ...) __printflike(1, 2); 57169689Skanvoid pjdlogv_prefix_set(const char *fmt, va_list ap) __printflike(1, 0); 5890075Sobrien 5990075Sobrienvoid pjdlog_common(int loglevel, int debuglevel, int error, const char *fmt, 6090075Sobrien ...) __printflike(4, 5); 6190075Sobrienvoid pjdlogv_common(int loglevel, int debuglevel, int error, const char *fmt, 6290075Sobrien va_list ap) __printflike(4, 0); 6390075Sobrien 6490075Sobrienvoid pjdlog(int loglevel, const char *fmt, ...) __printflike(2, 3); 6590075Sobrienvoid pjdlogv(int loglevel, const char *fmt, va_list ap) __printflike(2, 0); 6690075Sobrien 6790075Sobrien#define pjdlogv_emergency(fmt, ap) pjdlogv(LOG_EMERG, (fmt), (ap)) 6890075Sobrien#define pjdlog_emergency(...) pjdlog(LOG_EMERG, __VA_ARGS__) 6990075Sobrien#define pjdlogv_alert(fmt, ap) pjdlogv(LOG_ALERT, (fmt), (ap)) 7090075Sobrien#define pjdlog_alert(...) pjdlog(LOG_ALERT, __VA_ARGS__) 7190075Sobrien#define pjdlogv_critical(fmt, ap) pjdlogv(LOG_CRIT, (fmt), (ap)) 7290075Sobrien#define pjdlog_critical(...) pjdlog(LOG_CRIT, __VA_ARGS__) 7390075Sobrien#define pjdlogv_error(fmt, ap) pjdlogv(LOG_ERR, (fmt), (ap)) 7490075Sobrien#define pjdlog_error(...) pjdlog(LOG_ERR, __VA_ARGS__) 7590075Sobrien#define pjdlogv_warning(fmt, ap) pjdlogv(LOG_WARNING, (fmt), (ap)) 7690075Sobrien#define pjdlog_warning(...) pjdlog(LOG_WARNING, __VA_ARGS__) 7790075Sobrien#define pjdlogv_notice(fmt, ap) pjdlogv(LOG_NOTICE, (fmt), (ap)) 7890075Sobrien#define pjdlog_notice(...) pjdlog(LOG_NOTICE, __VA_ARGS__) 7990075Sobrien#define pjdlogv_info(fmt, ap) pjdlogv(LOG_INFO, (fmt), (ap)) 8090075Sobrien#define pjdlog_info(...) pjdlog(LOG_INFO, __VA_ARGS__) 8190075Sobrien 8290075Sobrienvoid pjdlog_debug(int debuglevel, const char *fmt, ...) __printflike(2, 3); 8390075Sobrienvoid pjdlogv_debug(int debuglevel, const char *fmt, va_list ap) __printflike(2, 0); 8490075Sobrien 8590075Sobrienvoid pjdlog_errno(int loglevel, const char *fmt, ...) __printflike(2, 3); 8690075Sobrienvoid pjdlogv_errno(int loglevel, const char *fmt, va_list ap) __printflike(2, 0); 8790075Sobrien 8890075Sobrienvoid pjdlog_exit(int exitcode, const char *fmt, ...) __printflike(2, 3) __dead2; 8990075Sobrienvoid pjdlogv_exit(int exitcode, const char *fmt, va_list ap) __printflike(2, 0) __dead2; 9090075Sobrien 9190075Sobrienvoid pjdlog_exitx(int exitcode, const char *fmt, ...) __printflike(2, 3) __dead2; 9290075Sobrienvoid pjdlogv_exitx(int exitcode, const char *fmt, va_list ap) __printflike(2, 0) __dead2; 9390075Sobrien 9490075Sobrienvoid pjdlog_abort(const char *func, const char *file, int line, 9590075Sobrien const char *failedexpr, const char *fmt, ...) __printflike(5, 6) __dead2; 9690075Sobrien 9790075Sobrien#define PJDLOG_VERIFY(expr) do { \ 9890075Sobrien if (!(expr)) { \ 9990075Sobrien pjdlog_abort(__func__, __FILE__, __LINE__, #expr, \ 10090075Sobrien "%s", __func__); \ 10190075Sobrien } \ 10290075Sobrien} while (0) 10390075Sobrien#define PJDLOG_RVERIFY(expr, ...) do { \ 104132718Skan if (!(expr)) { \ 105169689Skan pjdlog_abort(__func__, __FILE__, __LINE__, #expr, \ 106132718Skan __VA_ARGS__); \ 10790075Sobrien } \ 10890075Sobrien} while (0) 10990075Sobrien#define PJDLOG_ABORT(...) pjdlog_abort(__func__, __FILE__, \ 11090075Sobrien __LINE__, NULL, __VA_ARGS__) 111169689Skan#ifdef NDEBUG 112169689Skan#define PJDLOG_ASSERT(expr) do { } while (0) 113169689Skan#define PJDLOG_RASSERT(...) do { } while (0) 114169689Skan#else 11590075Sobrien#define PJDLOG_ASSERT(expr) PJDLOG_VERIFY(expr) 11690075Sobrien#define PJDLOG_RASSERT(...) PJDLOG_RVERIFY(__VA_ARGS__) 11790075Sobrien#endif 11890075Sobrien 119117395Skan#endif /* !_PJDLOG_H_ */ 120132718Skan