00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef AXUTIL_LOG_H
00020 #define AXUTIL_LOG_H
00021
00022 #include <axutil_allocator.h>
00023
00024 #ifdef __cplusplus
00025 extern "C"
00026 {
00027 #endif
00028
00029 typedef struct axutil_log_ops axutil_log_ops_t;
00030 typedef struct axutil_log axutil_log_t;
00031
00032 #define AXIS2_LOG_SI __FILE__,__LINE__
00033
00057 typedef enum axutil_log_levels
00058 {
00059
00061 AXIS2_LOG_LEVEL_CRITICAL = 0,
00062
00064 AXIS2_LOG_LEVEL_ERROR,
00065
00067 AXIS2_LOG_LEVEL_WARNING,
00068
00070 AXIS2_LOG_LEVEL_INFO,
00071
00073 AXIS2_LOG_LEVEL_DEBUG,
00074
00076 AXIS2_LOG_LEVEL_USER,
00077
00079 AXIS2_LOG_LEVEL_TRACE
00080
00081 } axutil_log_levels_t;
00082
00088 struct axutil_log_ops
00089 {
00090
00096 void(
00097 AXIS2_CALL
00098 * free)(
00099 axutil_allocator_t * allocator,
00100 struct axutil_log * log);
00101
00108 void(
00109 AXIS2_CALL
00110 * write)(
00111 axutil_log_t * log,
00112 const axis2_char_t * buffer,
00113 axutil_log_levels_t level,
00114 const axis2_char_t * file,
00115 const int line);
00116 };
00117
00123 struct axutil_log
00124 {
00125
00127 const axutil_log_ops_t *ops;
00128
00130 axutil_log_levels_t level;
00131
00133 int size;
00134
00136 axis2_bool_t enabled;
00137
00138 };
00139
00140 AXIS2_EXTERN void AXIS2_CALL
00141 axutil_log_impl_log_critical(
00142 axutil_log_t * log,
00143 const axis2_char_t * filename,
00144 const int linenumber,
00145 const axis2_char_t * format,
00146 ...);
00147
00148 AXIS2_EXTERN void AXIS2_CALL
00149 axutil_log_impl_log_error(
00150 axutil_log_t * log,
00151 const axis2_char_t * filename,
00152 const int linenumber,
00153 const axis2_char_t * format,
00154 ...);
00155
00156 AXIS2_EXTERN void AXIS2_CALL
00157 axutil_log_impl_log_warning(
00158 axutil_log_t * log,
00159 const axis2_char_t * filename,
00160 const int linenumber,
00161 const axis2_char_t * format,
00162 ...);
00163
00164 AXIS2_EXTERN void AXIS2_CALL
00165 axutil_log_impl_log_info(
00166 axutil_log_t * log,
00167 const axis2_char_t * format,
00168 ...);
00169
00170 AXIS2_EXTERN void AXIS2_CALL
00171 axutil_log_impl_log_user(
00172 axutil_log_t * log,
00173 const axis2_char_t * filename,
00174 const int linenumber,
00175 const axis2_char_t * format,
00176 ...);
00177
00178 AXIS2_EXTERN void AXIS2_CALL
00179 axutil_log_impl_log_debug(
00180 axutil_log_t * log,
00181 const axis2_char_t * filename,
00182 const int linenumber,
00183 const axis2_char_t * format,
00184 ...);
00185
00186 AXIS2_EXTERN void AXIS2_CALL
00187 axutil_log_impl_log_trace(
00188 axutil_log_t * log,
00189 const axis2_char_t * filename,
00190 const int linenumber,
00191 const axis2_char_t * format,
00192 ...);
00193
00194 AXIS2_EXTERN void AXIS2_CALL
00195 axutil_log_free(
00196 axutil_allocator_t * allocator,
00197 struct axutil_log *log);
00198
00199 AXIS2_EXTERN void AXIS2_CALL
00200 axutil_log_write(
00201 axutil_log_t * log,
00202 const axis2_char_t * buffer,
00203 axutil_log_levels_t level,
00204 const axis2_char_t * file,
00205 const int line);
00206
00207
00208 #define AXIS2_LOG_FREE(allocator, log) \
00209 axutil_log_free(allocator, log)
00210
00211 #define AXIS2_LOG_WRITE(log, buffer, level, file) \
00212 axutil_log_write(log, buffer, level, file, AXIS2_LOG_SI)
00213
00214 #define AXIS2_LOG_USER axutil_log_impl_log_user
00215 #define AXIS2_LOG_DEBUG axutil_log_impl_log_debug
00216 #define AXIS2_LOG_INFO axutil_log_impl_log_info
00217 #define AXIS2_LOG_WARNING axutil_log_impl_log_warning
00218 #define AXIS2_LOG_ERROR axutil_log_impl_log_error
00219 #define AXIS2_LOG_CRITICAL axutil_log_impl_log_critical
00220
00221 #ifdef AXIS2_TRACE
00222 #define AXIS2_LOG_TRACE axutil_log_impl_log_trace
00223 #else
00224 # ifdef HAVE_GNUC_VARARGS
00225 # define AXIS2_LOG_TRACE(params, args ...)
00226 # elif defined HAVE_ISO_VARARGS
00227 # define AXIS2_LOG_TRACE(params, ...)
00228 # elif __STDC__ && __STDC_VERSION > 199901L
00229 # define AXIS2_LOG_TRACE(params, ...)
00230 # elif WIN32
00231 # define AXIS2_LOG_TRACE axutil_log_impl_log_trace
00232 # else
00233 # define AXIS2_LOG_TRACE axutil_log_impl_log_trace
00234 # endif
00235 #endif
00236
00237 #ifndef AXIS2_LOG_PROJECT_PREFIX
00238
00239 #define AXIS2_LOG_PROJECT_PREFIX "[axis2c]"
00240 #endif
00241
00242 #define AXIS2_LOG_USER_MSG(log, msg) AXIS2_LOG_USER (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00243 #define AXIS2_LOG_DEBUG_MSG(log, msg) AXIS2_LOG_DEBUG (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00244 #define AXIS2_LOG_INFO_MSG(log, msg) AXIS2_LOG_INFO (log, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00245 #define AXIS2_LOG_WARNING_MSG(log, msg) AXIS2_LOG_WARNING (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00246 #define AXIS2_LOG_ERROR_MSG(log, msg) AXIS2_LOG_ERROR (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00247 #define AXIS2_LOG_CRITICAL_MSG(log, msg) AXIS2_LOG_CRITICAL (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00248 #define AXIS2_LOG_TRACE_MSG(log, msg) AXIS2_LOG_TRACE (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg)
00249
00252 #ifdef __cplusplus
00253 }
00254 #endif
00255
00256 #endif