You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2006/02/14 07:55:13 UTC

svn commit: r377654 - /webservices/axis2/trunk/c/modules/util/log.c

Author: damitha
Date: Mon Feb 13 22:55:12 2006
New Revision: 377654

URL: http://svn.apache.org/viewcvs?rev=377654&view=rev
Log:
issues 55 and 56, plus make thread safe

Modified:
    webservices/axis2/trunk/c/modules/util/log.c

Modified: webservices/axis2/trunk/c/modules/util/log.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/log.c?rev=377654&r1=377653&r2=377654&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/log.c (original)
+++ webservices/axis2/trunk/c/modules/util/log.c Mon Feb 13 22:55:12 2006
@@ -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,7 +241,16 @@
 		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)
 	{
@@ -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,14 +269,25 @@
 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)
 	{
@@ -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,14 +307,25 @@
 	   	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)
 	{
@@ -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,7 +447,16 @@
 		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)
 	{
@@ -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
-