Author: damitha
Date: Fri Feb  3 01:47:36 2006
New Revision: 374620

URL: http://svn.apache.org/viewcvs?rev=374620&view=rev
Log:
added file support

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=374620&r1=374619&r2=374620&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/log.c (original)
+++ webservices/axis2/trunk/c/modules/util/log.c Fri Feb  3 01:47:36 2006
@@ -13,68 +13,112 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-#include <axis2_log_default.h>
 #include <stdio.h>
+#include <axis2_platform_auto_sense.h>
+#include <axis2_log_default.h>
+#include <axis2_file_handler.h>
+
+typedef struct axis2_log_impl axis2_log_impl_t;
+
+struct axis2_log_impl
+{
+       axis2_log_t     log;
+       void                    *stream;
+};
+
+#define AXIS2_INTF_TO_IMPL(log) ((axis2_log_impl_t*)(log))
 
 axis2_status_t AXIS2_CALL
-axis2_log_impl_free (axis2_log_t *log)
+axis2_log_impl_free (axis2_allocator_t *allocator, axis2_log_t *log)
 {
-    if (NULL != log && NULL != log->ops)
-    {
-        free (log->ops);
-    }
-    if (NULL != log)
+       
+    if (NULL != log )
     {
-        free (log); 
+               if ( NULL != log->ops)
+               AXIS2_FREE (allocator, log->ops);
+               if (NULL != AXIS2_INTF_TO_IMPL(log)->stream)
+                       
axis2_file_handler_close(AXIS2_INTF_TO_IMPL(log)->stream);
+
+        AXIS2_FREE (allocator, AXIS2_INTF_TO_IMPL(log)); 
     }
-    return 0;
+    return AXIS2_SUCCESS;
 }
 
 /* function prototypes */
-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_status_t AXIS2_CALL 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_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_status_t AXIS2_CALL 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_DECLARE(axis2_log_t *)
-axis2_log_create (axis2_allocator_t * allocator, axis2_log_ops_t * ops)
+axis2_log_create (axis2_allocator_t * allocator, axis2_log_ops_t * ops,
+               axis2_char_t * stream_name)
 {
-    axis2_log_t *log;
+    axis2_log_impl_t *log_impl;
+       axis2_char_t *log_file_name = NULL;
     if (!allocator)
         return NULL;
 
-    log = (axis2_log_t *) AXIS2_MALLOC (allocator, sizeof (axis2_log_t));
+    log_impl = (axis2_log_impl_t *) AXIS2_MALLOC (allocator, sizeof 
(axis2_log_impl_t));
 
-    if (!log)
+    if (!log_impl)
         return NULL;
 
+       if (stream_name)
+       {
+               log_file_name = stream_name;
+       }
+       else
+       {
+               axis2_char_t *path = AXIS2_GETENV("AXIS2C_HOME");
+               axis2_char_t *filename = "/log/axis2.log";
+               int 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");
+       
+       log_impl->log.enabled = 1;
+
     if (ops)
-        log->ops = ops;
+        log_impl->log.ops = ops;
     else
     {
-        log->ops =
+        log_impl->log.ops =
             (axis2_log_ops_t *) AXIS2_MALLOC (allocator,
                                               sizeof (axis2_log_ops_t));
 
-        if (!log->ops)
+        if (!log_impl->log.ops)
         {
-            AXIS2_FREE (allocator, log);
+                       axis2_log_impl_free(allocator,(axis2_log_t*)log_impl);
             return NULL;
         }
-        log->ops->free = axis2_log_impl_free;
-        log->ops->write = axis2_log_impl_write;
-               log->ops->log_critical = axis2_log_impl_log_critical;
-               log->ops->log_error = axis2_log_impl_log_error;
-               log->ops->log_warning = axis2_log_impl_log_warning;
-               log->ops->log_info = axis2_log_impl_log_info;
-               log->ops->log_debug = axis2_log_impl_log_debug;
+        log_impl->log.ops->free = axis2_log_impl_free;
+        log_impl->log.ops->write = axis2_log_impl_write;
+               log_impl->log.ops->log_critical = axis2_log_impl_log_critical;
+               log_impl->log.ops->log_error = axis2_log_impl_log_error;
+               log_impl->log.ops->log_warning = axis2_log_impl_log_warning;
+               log_impl->log.ops->log_info = axis2_log_impl_log_info;
+               log_impl->log.ops->log_debug = axis2_log_impl_log_debug;
 
     }
 
-    return log;
+    return &(log_impl->log);
 }
+
 /*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;
@@ -99,14 +143,15 @@
                 level_str = "[debug] ";
                 break;
         }
-         fprintf(stderr,"%s %s(%d) %s\n", level_str,file,line,buffer);
+         fprintf(stderr,"%s %s(%d) %s\n", level_str, file, line, buffer);
     }
     
     return 0;
 }
 
 
-axis2_status_t AXIS2_CALL 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_status_t AXIS2_CALL 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)
 {
        if (!fd)
                return -1;
@@ -140,19 +185,28 @@
 }
 
 axis2_status_t 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_log_impl_log_debug(axis2_log_t *log, const axis2_char_t *filename,
+               const int linenumber, const axis2_char_t *format,...)
 {
+       FILE *fd = NULL;
+       
        if (!log || !format)
                return -1;
+
+       if (!log->enabled)
+               return -1;
+       
+       if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
+               return -1;
        
        if (AXIS2_LOG_LEVEL_DEBUG <= log->level)
        {
                char value[AXIS2_LEN_VALUE+1];
        va_list ap;
        va_start(ap, format);
-       vsnprintf(value, AXIS2_LEN_VALUE, format, ap);
+       AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
        va_end(ap);
-               
axis2_log_impl_write_to_file(stderr,AXIS2_LOG_LEVEL_DEBUG,filename,linenumber,value);
+               axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_DEBUG, 
filename, linenumber, value);
        }
        return 0;
 }
@@ -160,67 +214,98 @@
 axis2_status_t AXIS2_CALL 
 axis2_log_impl_log_info(axis2_log_t *log, const axis2_char_t *format,...)
 {
+       FILE *fd = NULL;
+       
        if (!log || !format)
                return -1;
        
+       if (!log->enabled)
+               return -1;
+       if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
+               return -1;
+       
        if (AXIS2_LOG_LEVEL_INFO <= log->level)
        {
                char value[AXIS2_LEN_VALUE+1];
        va_list ap;
        va_start(ap, format);
-       vsnprintf(value, AXIS2_LEN_VALUE, format, ap);
+       AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
        va_end(ap);
-               axis2_log_impl_write_to_file(stderr, AXIS2_LOG_LEVEL_INFO, 
NULL, -1, value);
+               axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_INFO, NULL, 
-1, value);
        }
        return 0;
 }
 
 axis2_status_t 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_log_impl_log_warning(axis2_log_t *log, const axis2_char_t *filename,
+               const int linenumber, const axis2_char_t *format,...)
 {
+       FILE *fd = NULL;
+       
        if (!log || !format)
                return -1;
        
+       if (!log->enabled)
+               return -1;
+       if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
+               return -1;
+       
        if (AXIS2_LOG_LEVEL_WARNING <= log->level)
        {
                char value[AXIS2_LEN_VALUE+1];
        va_list ap;
        va_start(ap, format);
-       vsnprintf(value, AXIS2_LEN_VALUE, format, ap);
+       AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
        va_end(ap);
-               
axis2_log_impl_write_to_file(stderr,AXIS2_LOG_LEVEL_WARNING,filename,linenumber,value);
+               axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_WARNING, 
filename, linenumber, value);
        }
        return 0;
 }
 
 
 axis2_status_t 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_log_impl_log_error(axis2_log_t *log, const axis2_char_t *filename,
+               const int linenumber, const axis2_char_t *format,...)
 {
+       FILE *fd = NULL;
+       
        if (!log || !format)
                return -1;
        
+       if (!log->enabled)
+               return -1;
+       if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
+               return -1;
+       
        char value[AXIS2_LEN_VALUE+1];
        va_list ap;
        va_start(ap, format);
-       vsnprintf(value, AXIS2_LEN_VALUE, format, ap);
+       AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
        va_end(ap);
-       
axis2_log_impl_write_to_file(stderr,AXIS2_LOG_LEVEL_ERROR,filename,linenumber,value);
+       axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_ERROR, filename, 
linenumber, value);
        return 0;
 }
        
 axis2_status_t 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_log_impl_log_critical(axis2_log_t *log, const axis2_char_t *filename,
+               const int linenumber, const axis2_char_t *format,...)
 {
+       FILE *fd = NULL;
+       
        if (!log || !format)
                return -1;
        
+       if (!log->enabled)
+               return -1;
+       if (NULL == (fd = AXIS2_INTF_TO_IMPL(log)->stream))
+               return -1;
+       
        char value[AXIS2_LEN_VALUE+1];
        va_list ap;
        va_start(ap, format);
-       vsnprintf(value, AXIS2_LEN_VALUE, format, ap);
+       AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
        va_end(ap);
-       
axis2_log_impl_write_to_file(stderr,AXIS2_LOG_LEVEL_CRITICAL,filename,linenumber,value);
+       axis2_log_impl_write_to_file(fd, AXIS2_LOG_LEVEL_CRITICAL, filename, 
linenumber, value);
        return 0;
 }
 


Reply via email to