blob: 677fb821c06a829f83ee3dca39ea570ec59dce7b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef AXIS2_LOG_H
#define AXIS2_LOG_H
#include <axis2_allocator.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct axis2_log_ops axis2_log_ops_t;
typedef struct axis2_log axis2_log_t;
#define AXIS2_LOG_SI __FILE__,__LINE__
/**
* @defgroup axis2_log log
* @ingroup axis2_util
* @{
*/
/*TODO:log_xml*/
/**
*Examples
*To write debug information to log
*AXIS2_LOG_DEBUG(log,AXIS2_LOG_SI,"log this %s %d","test",123);
*This would log
*"log this test 123" into the log file
*
*similar macros are defined for different log levels: CRITICAL,ERROR,WARNING and INFO
*
*CRITICAL and ERROR logs are always written to file and other logs are written
*depending on the log level set (log->level)
*/
/**
* \brief Axis2 log levels
*/
typedef enum axis2_log_levels
{
/** Critical level, logs only critical errors */
AXIS2_LOG_LEVEL_CRITICAL = 0,
/** Error level, logs only errors */
AXIS2_LOG_LEVEL_ERROR,
/** Warning level, logs only warnings */
AXIS2_LOG_LEVEL_WARNING,
/** Info level, logs information */
AXIS2_LOG_LEVEL_INFO,
/** Debug level, logs everything */
AXIS2_LOG_LEVEL_DEBUG,
/** Trace level, Enable with compiler time option AXIS2_TRACE */
AXIS2_LOG_LEVEL_TRACE
} axis2_log_levels_t;
/**
* \brief Axis2 log ops struct
*
* Encapsulator struct for ops of axis2_log
*/
struct axis2_log_ops
{
/**
* deletes the log
* @return axis2_status_t AXIS2_SUCCESS on success else AXIS2_FAILURE
*/
void (AXIS2_CALL *
free) (axis2_allocator_t *allocator,
struct axis2_log *log);
/**
* writes to the log
* @param buffer buffer to be written to log
* @param size size of the buffer to be written to log
* @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE
*/
void (AXIS2_CALL *
write) (axis2_log_t *log,
const axis2_char_t *buffer,
axis2_log_levels_t level,
const axis2_char_t *file,
const int line);
};
/**
* \brief Axis2 Log struct
*
* Log is the encapsulating struct for all log related data and ops
*/
struct axis2_log
{
/** Log related ops */
struct axis2_log_ops *ops;
/** Log level */
axis2_log_levels_t level;
/** Is logging enabled? */
axis2_bool_t enabled;
};
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_critical(axis2_log_t *log,
const axis2_char_t *filename,
const int linenumber,
const axis2_char_t *format,...);
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_error(axis2_log_t *log,
const axis2_char_t *filename,
const int linenumber,
const axis2_char_t *format,...);
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_warning(axis2_log_t *log,
const axis2_char_t *filename,
const int linenumber,
const axis2_char_t *format,...);
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_info(axis2_log_t *log,
const axis2_char_t *format,...);
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_debug(axis2_log_t *log,
const axis2_char_t *filename,
const int linenumber,
const axis2_char_t *format,...);
AXIS2_EXTERN void AXIS2_CALL
axis2_log_impl_log_trace(axis2_log_t *log,
const axis2_char_t *filename,
const int linenumber,
const axis2_char_t *format,...);
#define AXIS2_LOG_FREE(allocator, log) \
((log->ops)->free(allocator, log))
#define AXIS2_LOG_WRITE(log, buffer, level) \
((log)->ops->write(log, buffer, level,AXIS2_LOG_SI))
#define AXIS2_LOG_DEBUG axis2_log_impl_log_debug
#define AXIS2_LOG_INFO axis2_log_impl_log_info
#define AXIS2_LOG_WARNING axis2_log_impl_log_warning
#define AXIS2_LOG_ERROR axis2_log_impl_log_error
#define AXIS2_LOG_CRITICAL axis2_log_impl_log_critical
#ifdef AXIS2_TRACE
#define AXIS2_LOG_TRACE axis2_log_impl_log_trace
#else
# ifdef HAVE_GNUC_VARARGS
# define AXIS2_LOG_TRACE(params, args ...)
# elif defined HAVE_ISO_VARARGS
# define AXIS2_LOG_TRACE(params, ...)
# elif __STDC__ && __STDC_VERSION > 199901L
# define AXIS2_LOG_TRACE(params, ...)
# elif WIN32
# define AXIS2_LOG_TRACE axis2_log_impl_log_trace
# else
# define AXIS2_LOG_TRACE axis2_log_impl_log_trace
# endif
#endif
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_LOG_H */