You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by Nabeel <na...@wso2.com> on 2006/02/14 07:54:14 UTC
[Axis2] patch - for the jira issues 55 and 56
Hi,
Patch for the issues 55/56 is attached with this. pls review and apply.
Now logging is made thread safe.
Logs are written to $AXIS2C_HOME/logs folder; default log file name is
axis2.log
thanks
-Nabeel
Re: [Axis2] patch - for the jira issues 55 and 56
Posted by Samisa Abeysinghe <sa...@gmail.com>.
Hi Nabeel,
You can also attach the pathces to the respective Jiras themselves,
which is the preffered way.
Thanks,
Samisa...
Nabeel wrote:
> Hi,
> Patch for the issues 55/56 is attached with this. pls review and apply.
>
> Now logging is made thread safe.
> Logs are written to $AXIS2C_HOME/logs folder; default log file name is
> axis2.log
>
> thanks
> -Nabeel
>
>------------------------------------------------------------------------
>
>Index: log.c
>===================================================================
>--- log.c (revision 377571)
>+++ log.c (working copy)
>@@ -17,13 +17,15 @@
> #include <axis2_platform_auto_sense.h>
> #include <axis2_log_default.h>
> #include <axis2_file_handler.h>
>+#include <axis2_thread.h>
>
> typedef struct axis2_log_impl axis2_log_impl_t;
>
> struct axis2_log_impl
> {
>- axis2_log_t log;
>- void *stream;
>+ axis2_log_t log;
>+ void *stream;
>+ axis2_thread_mutex_t *mutex;
> };
>
> #define AXIS2_INTF_TO_IMPL(log) ((axis2_log_impl_t*)(log))
>@@ -50,8 +52,8 @@
> const axis2_char_t *file, const int line);
>
> AXIS2_DECLARE(axis2_status_t) axis2_log_impl_write_to_file(FILE *fd,
>- axis2_log_levels_t level, const axis2_char_t * file, const int line,
>- const axis2_char_t * value);
>+ axis2_thread_mutex_t *mutex, axis2_log_levels_t level,
>+ const axis2_char_t * file, const int line, const axis2_char_t * value);
>
>
> AXIS2_DECLARE(axis2_log_t *)
>@@ -59,37 +61,66 @@
> axis2_char_t * stream_name)
> {
> axis2_log_impl_t *log_impl;
>- axis2_char_t *log_file_name = NULL;
>+ axis2_char_t *path_home;
>+ axis2_char_t log_file_name[500];
>+ axis2_char_t log_dir[500];
>+ axis2_char_t tmp_filename[100];
>+
> if (!allocator)
> return NULL;
>
>- log_impl = (axis2_log_impl_t *) AXIS2_MALLOC (allocator, sizeof (axis2_log_impl_t));
>+ log_impl = (axis2_log_impl_t *) AXIS2_MALLOC (allocator,
>+ sizeof (axis2_log_impl_t));
>
> if (!log_impl)
> return NULL;
>-
>- if (stream_name)
>+
>+ log_impl->mutex = axis2_thread_mutex_create(allocator,
>+ AXIS2_THREAD_MUTEX_DEFAULT);
>+
>+ if (!log_impl->mutex)
> {
>- log_file_name = stream_name;
>+ fprintf(stderr,"cannot create log mutex \n");
>+ return NULL;
> }
>+
>+ /* default log file is axis2.log */
>+ if (stream_name)
>+ snprintf(tmp_filename,100,"%s",stream_name);
> else
>- {
>- axis2_char_t *filename = NULL;
>- axis2_char_t *path = NULL;
>- int len = 0;
>- path = AXIS2_GETENV("AXIS2C_HOME");
>- filename = "/log/axis2.log";
>- len = axis2_strlen(path) + axis2_strlen(filename)+1;
>- log_file_name = (axis2_char_t*)AXIS2_MALLOC(allocator,
>- len*sizeof(axis2_char_t));
>- memcpy(log_file_name, path, axis2_strlen(path)*sizeof(axis2_char_t));
>- memcpy((log_file_name + axis2_strlen(path)*sizeof(axis2_char_t)), filename,
>- axis2_strlen(filename)*sizeof(axis2_char_t));
>- log_file_name[len*sizeof(axis2_char_t) - sizeof(axis2_char_t)] = '\0';
>- printf("default file name = %s\n",log_file_name);
>- }
>- log_impl->stream = axis2_file_handler_open(log_file_name,"w");
>+ snprintf(tmp_filename,100,"%s","axis2.log");
>
>+ /* we write all logs to AXIS2C_HOME/logs if it is set otherwise
>+ * to the working dir
>+ */
>+ if (NULL != (path_home = AXIS2_GETENV("AXIS2C_HOME")))
>+ {
>+ snprintf(log_dir, 500, "%s%c%s", path_home, AXIS2_PATH_SEP_CHAR, "logs");
>+ if (AXIS2_SUCCESS == axis2_file_handler_access(log_dir,AXIS2_F_OK))
>+ {
>+ snprintf(log_file_name, 500, "%s%c%s", log_dir, AXIS2_PATH_SEP_CHAR,
>+ tmp_filename);
>+ }
>+ else
>+ {
>+ fprintf(stderr, "log folder %s does not exist - log file %s is written to . dir\n",
>+ log_dir, tmp_filename);
>+ snprintf(log_file_name, 500, "%s", tmp_filename);
>+ }
>+ }
>+ else
>+ {
>+ fprintf(stderr, "AXIS2C_HOME is not set - log is written to . dir\n");
>+ snprintf(log_file_name, 500, "%s", tmp_filename);
>+ }
>+
>+ axis2_thread_mutex_lock(log_impl->mutex);
>+
>+ log_impl->stream = axis2_file_handler_open(log_file_name,"as+");
>+
>+ axis2_thread_mutex_unlock(log_impl->mutex);
>+
>+ /* by default, log is enabled */
> log_impl->log.enabled = 1;
>
> if (ops)
>@@ -114,8 +145,8 @@
>
> /*TODO:remove this method*/
> axis2_status_t AXIS2_CALL
>-axis2_log_impl_write (axis2_log_t *log, const axis2_char_t *buffer, axis2_log_levels_t level,
>- const axis2_char_t *file, const int line)
>+axis2_log_impl_write (axis2_log_t *log, const axis2_char_t *buffer,
>+ axis2_log_levels_t level, const axis2_char_t *file, const int line)
> {
> if (!log || !buffer)
> return -1;
>@@ -151,8 +182,9 @@
>
>
> AXIS2_DECLARE(axis2_status_t)
>-axis2_log_impl_write_to_file(FILE *fd, axis2_log_levels_t level,
>- const axis2_char_t *file, const int line, const axis2_char_t *value)
>+axis2_log_impl_write_to_file(FILE *fd, axis2_thread_mutex_t *mutex,
>+ axis2_log_levels_t level, const axis2_char_t *file,
>+ const int line, const axis2_char_t *value)
> {
> char *level_str = "";
> if (!fd)
>@@ -182,11 +214,16 @@
> level_str = "[...TRACE...] ";
> break;
> }
>+ axis2_thread_mutex_lock(mutex);
> if (file)
>- fprintf(fd,"[%s] %s%s(%d) %s\n", axis2_log_impl_get_time_str(), level_str, file, line, value);
>+ fprintf(fd,"[%s] %s%s(%d) %s\n", axis2_log_impl_get_time_str(),
>+ level_str, file, line, value);
> else
>- fprintf(fd,"[%s] %s %s\n", axis2_log_impl_get_time_str(), level_str, value);
>+ fprintf(fd,"[%s] %s %s\n", axis2_log_impl_get_time_str(),
>+ level_str, value);
> fflush(fd);
>+ axis2_thread_mutex_unlock(mutex);
>+
> return 0;
> }
>
>@@ -195,6 +232,7 @@
> const int linenumber, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>
> if (!log || !format)
> return -1;
>@@ -203,8 +241,17 @@
> return -1;
>
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>+
> if (AXIS2_LOG_LEVEL_DEBUG <= log->level)
> {
> char value[AXIS2_LEN_VALUE+1];
>@@ -212,7 +259,7 @@
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_DEBUG, filename,
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_DEBUG, filename,
> linenumber, value);
> }
> return 0;
>@@ -222,15 +269,26 @@
> axis2_log_impl_log_info(axis2_log_t *log, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>
> if (!log || !format)
> return -1;
>
> if (!log->enabled)
> return -1;
>+
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>+
> if (AXIS2_LOG_LEVEL_INFO <= log->level)
> {
> char value[AXIS2_LEN_VALUE+1];
>@@ -238,7 +296,8 @@
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_INFO, NULL, -1, value);
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_INFO, NULL, -1,
>+ value);
> }
> return 0;
> }
>@@ -248,15 +307,26 @@
> const int linenumber, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>
> if (!log || !format)
> return -1;
>
> if (!log->enabled)
> return -1;
>+
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>+
> if (AXIS2_LOG_LEVEL_WARNING <= log->level)
> {
> char value[AXIS2_LEN_VALUE+1];
>@@ -264,8 +334,8 @@
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_WARNING, filename,
>- linenumber, value);
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_WARNING,
>+ filename, linenumber, value);
> }
> return 0;
> }
>@@ -276,6 +346,8 @@
> const int linenumber, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>+
> char value[AXIS2_LEN_VALUE+1];
> va_list ap;
>
>@@ -284,14 +356,24 @@
>
> if (!log->enabled)
> return -1;
>+
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>
>+
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_ERROR, filename,
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_ERROR, filename,
> linenumber, value);
> return 0;
> }
>@@ -301,6 +383,8 @@
> const int linenumber, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>+
> char value[AXIS2_LEN_VALUE+1];
> va_list ap;
> if (!log || !format)
>@@ -308,14 +392,24 @@
>
> if (!log->enabled)
> return -1;
>+
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>
>+
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_CRITICAL, filename,
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_CRITICAL, filename,
> linenumber, value);
> return 0;
> }
>@@ -344,6 +438,7 @@
> const int linenumber, const axis2_char_t *format,...)
> {
> FILE *fd = NULL;
>+ axis2_thread_mutex_t *mutex = NULL;
>
> if (!log || !format)
> return -1;
>@@ -352,8 +447,17 @@
> return -1;
>
> if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
>+ {
>+ fprintf(stderr,"Stream is not found\n");
> return -1;
>+ }
>
>+ if (NULL == (mutex = AXIS2_INTF_TO_IMPL(log)->mutex))
>+ {
>+ fprintf(stderr,"Log mutex is not found\n");
>+ return -1;
>+ }
>+
> if (AXIS2_LOG_LEVEL_TRACE <= log->level)
> {
> char value[AXIS2_LEN_VALUE+1];
>@@ -361,12 +465,13 @@
> va_start(ap, format);
> AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
> va_end(ap);
>- axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_TRACE, filename,
>+ axis2_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_TRACE, filename,
> linenumber, value);
> }
> return 0;
> }
> #else
>-AXIS2_DECLARE(axis2_status_t) axis2_log_impl_log_trace(axis2_log_t *log,const axis2_char_t *filename,const int linenumber,const axis2_char_t *format,...) {}
>+AXIS2_DECLARE(axis2_status_t) axis2_log_impl_log_trace(axis2_log_t *log,
>+ const axis2_char_t *filename, const int linenumber,
>+ const axis2_char_t *format,...) {}
> #endif
>-
>
>