csync_log.h

Go to the documentation of this file.
00001 /*
00002  * libcsync -- a library to sync a directory with another
00003  *
00004  * Copyright (c) 2006 by Andreas Schneider <mail@cynapses.org>
00005  *
00006  * This program is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software Foundation,
00018  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00019  */
00020 
00021 /**
00022  * @file csync_log.h
00023  *
00024  * @brief Logging interface of csync
00025  *
00026  * @defgroup csyncLogInternals csync logging internals
00027  * @ingroup csyncInternalAPI
00028  *
00029  * @{
00030  */
00031 
00032 #ifndef _CSYNC_LOG_H
00033 #define _CSYNC_LOG_H
00034 
00035 #include "config.h"
00036 
00037 #ifdef CSYNC_TEST
00038 #undef WITH_LOG4C
00039 #endif
00040 
00041 #ifdef WITH_LOG4C
00042 #include "log4c.h"
00043 #else
00044 #include <stdarg.h>
00045 #include <stdio.h>
00046 #endif
00047 
00048 #ifndef CSYNC_LOG_CATEGORY_NAME
00049 #define CSYNC_LOG_CATEGORY_NAME "root"
00050 #endif
00051 
00052 /* GCC have printf type attribute check.  */
00053 #ifdef __GNUC__
00054 #define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
00055 #else
00056 #define PRINTF_ATTRIBUTE(a,b)
00057 #endif /* __GNUC__ */
00058 
00059 #define CSYNC_LOG(priority, fmt, ...) \
00060   csync_log((char *) CSYNC_LOG_CATEGORY_NAME, priority, fmt, ## __VA_ARGS__)
00061 
00062 #ifdef WITH_LOG4C
00063 #define CSYNC_LOG_PRIORITY_FATAL   LOG4C_PRIORITY_FATAL
00064 #define CSYNC_LOG_PRIORITY_ALERT   LOG4C_PRIORITY_ALERT
00065 #define CSYNC_LOG_PRIORITY_CRIT    LOG4C_PRIORITY_CRIT
00066 #define CSYNC_LOG_PRIORITY_ERROR   LOG4C_PRIORITY_ERROR
00067 #define CSYNC_LOG_PRIORITY_WARN    LOG4C_PRIORITY_WARN
00068 #define CSYNC_LOG_PRIORITY_NOTICE  LOG4C_PRIORITY_NOTICE
00069 #define CSYNC_LOG_PRIORITY_INFO    LOG4C_PRIORITY_INFO
00070 #define CSYNC_LOG_PRIORITY_DEBUG   LOG4C_PRIORITY_DEBUG
00071 #define CSYNC_LOG_PRIORITY_TRACE   LOG4C_PRIORITY_TRACE
00072 #define CSYNC_LOG_PRIORITY_NOTSET  LOG4C_PRIORITY_NOTSET
00073 #define CSYNC_LOG_PRIORITY_UNKNOWN LOG4C_PRIORITY_UNKNOWN
00074 #else
00075 #define LOG4C_INLINE inline
00076 #define CSYNC_LOG_PRIORITY_FATAL   000
00077 #define CSYNC_LOG_PRIORITY_ALERT   100
00078 #define CSYNC_LOG_PRIORITY_CRIT    200
00079 #define CSYNC_LOG_PRIORITY_ERROR   300
00080 #define CSYNC_LOG_PRIORITY_WARN    500
00081 #define CSYNC_LOG_PRIORITY_NOTICE  500
00082 #define CSYNC_LOG_PRIORITY_INFO    600
00083 #define CSYNC_LOG_PRIORITY_DEBUG   700
00084 #define CSYNC_LOG_PRIORITY_TRACE   800
00085 #define CSYNC_LOG_PRIORITY_NOTSET  900
00086 #define CSYNC_LOG_PRIORITY_UNKNOWN 1000
00087 #endif
00088 
00089 static LOG4C_INLINE void csync_log(char *catName, int a_priority,
00090     const char* a_format,...) PRINTF_ATTRIBUTE(3, 4);
00091 /**
00092  * @brief The constructor of the logging mechanism
00093  *
00094  * @return  0 on success, less than 0 if an error occured.
00095  */
00096 static LOG4C_INLINE int csync_log_init() {
00097 #ifdef WITH_LOG4C
00098   return log4c_init();
00099 #else
00100   return 0;
00101 #endif
00102 }
00103 
00104 /**
00105  * @brief Load resource configuration file
00106  *
00107  * @param Path to the file to load
00108  *
00109  * @return  0 on success, less than 0 if an error occured.
00110  **/
00111 static LOG4C_INLINE int csync_log_load(const char *path){
00112 #ifdef WITH_LOG4C
00113   return log4c_load(path);
00114 #else
00115   if (path == NULL) {
00116     return 0;
00117   }
00118   return 0;
00119 #endif
00120 }
00121 
00122 /**
00123  * @brief The destructor of the logging mechanism
00124  *
00125  * @return  0 on success, less than 0 if an error occured.
00126  */
00127 static LOG4C_INLINE int csync_log_fini(){
00128 #ifdef WITH_LOG4C
00129   return log4c_fini();
00130 #else
00131   return 0;
00132 #endif
00133 }
00134 
00135 static LOG4C_INLINE int csync_log_setappender(char *catName, char *appName) {
00136 #ifdef WITH_LOG4C
00137   log4c_category_set_appender(log4c_category_get(catName),
00138       log4c_appender_get(appName));
00139   return 0;
00140 #else
00141   if (catName == NULL || appName == NULL) {
00142     return 0;
00143   }
00144   return 0;
00145 #endif
00146 }
00147 
00148 static LOG4C_INLINE void csync_log(char *catName, int a_priority,
00149     const char* a_format,...) {
00150 #ifdef WITH_LOG4C
00151   const log4c_category_t* a_category = log4c_category_get(catName);
00152   if (log4c_category_is_priority_enabled(a_category, a_priority)) {
00153     va_list va;
00154     va_start(va, a_format);
00155     log4c_category_vlog(a_category, a_priority, a_format, va);
00156     va_end(va);
00157   }
00158 #else
00159   va_list va;
00160   va_start(va, a_format);
00161   if (a_priority > 0) {
00162     printf("%s - ", catName);
00163   }
00164   vprintf(a_format, va);
00165   va_end(va);
00166   printf("\n");
00167 #endif
00168 }
00169 
00170 /**
00171  * }@
00172  */
00173 #endif /* _CSYNC_LOG_H */
00174 
00175 /* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */
Generated on Mon Jul 5 22:58:37 2010 for doc by  doxygen 1.6.3