From c452979e74d7b74083fc0556e5dcab7cd81471e5 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Fri, 27 Aug 2004 16:27:41 +0000 Subject: [PATCH] add new simple logging functions --- ipmitool/include/ipmitool/log.h | 67 ++++++++++++++ ipmitool/lib/log.c | 154 ++++++++++++++++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 ipmitool/include/ipmitool/log.h create mode 100644 ipmitool/lib/log.c diff --git a/ipmitool/include/ipmitool/log.h b/ipmitool/include/ipmitool/log.h new file mode 100644 index 0000000..e7b0e5d --- /dev/null +++ b/ipmitool/include/ipmitool/log.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. + * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. + * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE + * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING + * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL + * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, + * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR + * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF + * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, + * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use + * in the design, construction, operation or maintenance of any nuclear + * facility. + */ + +#ifndef IPMITOOL_LOG_H +#define IPMITOOL_LOG_H + +#include + +/* sys/syslog.h: + * LOG_EMERG 0 system is unusable + * LOG_ALERT 1 action must be taken immediately + * LOG_CRIT 2 critical conditions + * LOG_ERR 3 error conditions + * LOG_WARNING 4 warning conditions + * LOG_NOTICE 5 normal but significant condition + * LOG_INFO 6 informational + * LOG_DEBUG 7 debug-level messages + */ + +#define LOG_ERROR LOG_ERR +#define LOG_WARN LOG_WARNING + +#define LOG_NAME_DEFAULT "ipmitool" +#define LOG_MSG_LENGTH 1024 + +void log_init(const char * name, int isdaemon, int verbose); +void log_halt(void); +void log_level_set(int level); +int log_level_get(void); +void lprintf(int level, const char * format, ...); +void lperror(int level, const char * format, ...); + +#endif /*IPMITOOL_LOG_H*/ + diff --git a/ipmitool/lib/log.c b/ipmitool/lib/log.c new file mode 100644 index 0000000..ee733a4 --- /dev/null +++ b/ipmitool/lib/log.c @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. + * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. + * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE + * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING + * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL + * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, + * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR + * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF + * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, + * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use + * in the design, construction, operation or maintenance of any nuclear + * facility. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +struct logpriv_s { + char * name; + int daemon; + int level; +}; +struct logpriv_s *logpriv; + +static void log_reinit(void) +{ + log_init(NULL, 0, 0); +} + +void lprintf(int level, const char * format, ...) +{ + static char logmsg[LOG_MSG_LENGTH]; + va_list vptr; + + if (!logpriv) + log_reinit(); + + if (logpriv->level < level) + return; + + va_start(vptr, format); + vsnprintf(logmsg, LOG_MSG_LENGTH, format, vptr); + va_end(vptr); + + if (logpriv->daemon) + syslog(level, "%s", logmsg); + else + printf("%s\n", logmsg); + return; +} + +void lperror(int level, const char * format, ...) +{ + static char logmsg[LOG_MSG_LENGTH]; + va_list vptr; + + if (!logpriv) + log_reinit(); + + if (logpriv->level < level) + return; + + va_start(vptr, format); + vsnprintf(logmsg, LOG_MSG_LENGTH, format, vptr); + va_end(vptr); + + if (logpriv->daemon) + syslog(level, "%s: %s", logmsg, strerror(errno)); + else + fprintf(stderr, "%s: %s\n", logmsg, strerror(errno)); + return; +} + +/* + * open connection to syslog if daemon + */ +void log_init(const char * name, int isdaemon, int verbose) +{ + if (logpriv) + return; + + logpriv = malloc(sizeof(*logpriv)); + if (!logpriv) + return; + + if (name != NULL) + logpriv->name = strdup(name); + else + logpriv->name = strdup(LOG_NAME_DEFAULT); + + logpriv->daemon = isdaemon; + logpriv->level = verbose + LOG_NOTICE; + + if (logpriv->daemon) + openlog(logpriv->name, LOG_CONS, LOG_LOCAL4); +} + +/* + * stop syslog logging if daemon mode, + * free used memory that stored log service + */ +void log_halt(void) +{ + if (!logpriv) + return; + + if (logpriv->name) + free(logpriv->name); + + if (logpriv->daemon) + closelog(); + + free(logpriv); +} + +int log_level_get(void) +{ + return logpriv->level; +} + +void log_level_set(int level) +{ + logpriv->level = level; +} +