You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by da...@apache.org on 2007/10/24 12:04:50 UTC
svn commit: r587843 - in /webservices/axis2/branches/c/29092007/util:
include/axutil_file_handler.h include/axutil_log.h src/file_handler.c
src/log.c
Author: damitha
Date: Wed Oct 24 03:04:49 2007
New Revision: 587843
URL: http://svn.apache.org/viewvc?rev=587843&view=rev
Log:
adding log rotate functionality
Modified:
webservices/axis2/branches/c/29092007/util/include/axutil_file_handler.h
webservices/axis2/branches/c/29092007/util/include/axutil_log.h
webservices/axis2/branches/c/29092007/util/src/file_handler.c
webservices/axis2/branches/c/29092007/util/src/log.c
Modified: webservices/axis2/branches/c/29092007/util/include/axutil_file_handler.h
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/29092007/util/include/axutil_file_handler.h?rev=587843&r1=587842&r2=587843&view=diff
==============================================================================
--- webservices/axis2/branches/c/29092007/util/include/axutil_file_handler.h (original)
+++ webservices/axis2/branches/c/29092007/util/include/axutil_file_handler.h Wed Oct 24 03:04:49 2007
@@ -19,6 +19,7 @@
#define AXUTIL_FILE_HANDLER_H
#include <axutil_string.h>
+#include <stdio.h>
#ifdef __cplusplus
extern "C"
@@ -71,6 +72,15 @@
axutil_file_handler_access(
const axis2_char_t * path,
int mode);
+
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axutil_file_handler_copy(
+ FILE *from,
+ FILE *to);
+
+ long
+ axutil_file_handler_size(
+ const axis2_char_t *const name);
/** @} */
Modified: webservices/axis2/branches/c/29092007/util/include/axutil_log.h
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/29092007/util/include/axutil_log.h?rev=587843&r1=587842&r2=587843&view=diff
==============================================================================
--- webservices/axis2/branches/c/29092007/util/include/axutil_log.h (original)
+++ webservices/axis2/branches/c/29092007/util/include/axutil_log.h Wed Oct 24 03:04:49 2007
@@ -188,6 +188,7 @@
const axis2_char_t * file,
const int line);
+
#define AXIS2_LOG_FREE(allocator, log) \
axutil_log_free(allocator, log)
Modified: webservices/axis2/branches/c/29092007/util/src/file_handler.c
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/29092007/util/src/file_handler.c?rev=587843&r1=587842&r2=587843&view=diff
==============================================================================
--- webservices/axis2/branches/c/29092007/util/src/file_handler.c (original)
+++ webservices/axis2/branches/c/29092007/util/src/file_handler.c Wed Oct 24 03:04:49 2007
@@ -20,6 +20,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <platforms/axutil_platform_auto_sense.h>
+#include <sys/stat.h>
#include <axutil_file_handler.h>
@@ -67,3 +68,43 @@
}
return status;
}
+
+axis2_status_t
+axutil_file_handler_copy(
+ FILE *from,
+ FILE *to)
+{
+ axis2_char_t ch;
+
+ /* It is assumed that source and destination files are accessible and open*/
+ while(!feof(from))
+ {
+ ch = fgetc(from);
+ if(ferror(from))
+ {
+ /* Error reading source file */
+ return AXIS2_FAILURE;
+ }
+ if(!feof(from)) fputc(ch, to);
+ if(ferror(to))
+ {
+ /* Error writing destination file */
+ return AXIS2_FAILURE;
+ }
+ }
+ return AXIS2_SUCCESS;
+}
+
+long
+axutil_file_handler_size(
+ const axis2_char_t *const name)
+{
+ struct stat stbuf;
+ if(stat(name, &stbuf) == -1)
+ {
+ /* The file could not be accessed */
+ return AXIS2_FAILURE;
+ }
+ return stbuf.st_size;
+}
+
Modified: webservices/axis2/branches/c/29092007/util/src/log.c
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/29092007/util/src/log.c?rev=587843&r1=587842&r2=587843&view=diff
==============================================================================
--- webservices/axis2/branches/c/29092007/util/src/log.c (original)
+++ webservices/axis2/branches/c/29092007/util/src/log.c Wed Oct 24 03:04:49 2007
@@ -25,6 +25,11 @@
#include <axutil_thread.h>
typedef struct axutil_log_impl axutil_log_impl_t;
+#define AXUTIL_LOG_FILE_SIZE 2000
+
+static axis2_status_t
+axutil_log_impl_rotate(
+ axutil_log_t * log);
static void AXIS2_CALL axutil_log_impl_write(
axutil_log_t * log,
@@ -34,6 +39,7 @@
const int line);
AXIS2_EXTERN void AXIS2_CALL axutil_log_impl_write_to_file(
+ axutil_log_t * log,
FILE * fd,
axutil_thread_mutex_t * mutex,
axutil_log_levels_t level,
@@ -49,6 +55,7 @@
{
axutil_log_t log;
void *stream;
+ axis2_char_t *file_name;
axutil_thread_mutex_t *mutex;
};
@@ -74,12 +81,13 @@
{
axutil_thread_mutex_destroy(log_impl->mutex);
}
- if (AXIS2_INTF_TO_IMPL(log)->stream)
+ if (log_impl->stream)
{
- if (log_impl->stream)
- {
- axutil_file_handler_close(log_impl->stream);
- }
+ axutil_file_handler_close(log_impl->stream);
+ }
+ if (log_impl->file_name)
+ {
+ AXIS2_FREE(allocator, log_impl->file_name);
}
AXIS2_FREE(allocator, log_impl);
}
@@ -157,10 +165,16 @@
{
AXIS2_SNPRINTF(log_file_name, 500, "%s", tmp_filename);
}
+ log_impl->file_name = AXIS2_MALLOC(allocator, 500);
+ sprintf(log_impl->file_name, "%s", log_file_name);
axutil_thread_mutex_lock(log_impl->mutex);
log_impl->stream = axutil_file_handler_open(log_file_name, "a+");
+ if(!axutil_log_impl_rotate((axutil_log_t *) log_impl))
+ {
+ return NULL;
+ }
axutil_thread_mutex_unlock(log_impl->mutex);
@@ -227,6 +241,7 @@
AXIS2_EXTERN void AXIS2_CALL
axutil_log_impl_write_to_file(
+ axutil_log_t * log,
FILE * fd,
axutil_thread_mutex_t * mutex,
axutil_log_levels_t level,
@@ -262,6 +277,9 @@
break;
}
axutil_thread_mutex_lock(mutex);
+
+ axutil_log_impl_rotate(log);
+
if (file)
fprintf(fd, "[%s] %s%s(%d) %s\n", axutil_log_impl_get_time_str(),
level_str, file, line, value);
@@ -272,6 +290,40 @@
axutil_thread_mutex_unlock(mutex);
}
+static axis2_status_t
+axutil_log_impl_rotate(
+ axutil_log_t * log)
+{
+ FILE *old_log_fd = NULL;
+ axis2_char_t old_log_file_name[500];
+ axutil_log_impl_t *log_impl = AXIS2_INTF_TO_IMPL(log);
+ long size = axutil_file_handler_size(log_impl->file_name);
+
+ printf("size:%ld\n", size);
+ if(size >= AXUTIL_LOG_FILE_SIZE)
+ {
+ AXIS2_SNPRINTF(old_log_file_name, 500, "%s%s", log_impl->file_name,
+ ".old");
+ printf("file_name:%s\n", log_impl->file_name );
+ printf("old_file_name:%s\n", old_log_file_name);
+ old_log_fd = axutil_file_handler_open(old_log_file_name, "w");
+ if (!old_log_fd)
+ return;
+ f(!axutil_file_handler_copy(AXIS2_INTF_TO_IMPL(log)->stream,
+ old_log_fd))
+ {
+ axutil_file_handler_close(old_log_fd);
+ return AXIS2_FAILURE;
+ }
+ axutil_file_handler_close(AXIS2_INTF_TO_IMPL(log)->stream);
+ axutil_file_handler_close(old_log_fd);
+ remove(log_impl->file_name);
+ AXIS2_INTF_TO_IMPL(log)->stream = axutil_file_handler_open(
+ log_impl->file_name, "a+");
+ }
+ return AXIS2_SUCCESS;
+}
+
AXIS2_EXTERN void AXIS2_CALL
axutil_log_impl_log_debug(
axutil_log_t * log,
@@ -304,7 +356,7 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_DEBUG,
+ axutil_log_impl_write_to_file(log, fd, mutex, AXIS2_LOG_LEVEL_DEBUG,
filename, linenumber, value);
}
}
@@ -342,8 +394,8 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_INFO, NULL,
- -1, value);
+ axutil_log_impl_write_to_file(log, fd, mutex, AXIS2_LOG_LEVEL_INFO,
+ NULL, -1, value);
}
}
else
@@ -383,8 +435,8 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_WARNING,
- filename, linenumber, value);
+ axutil_log_impl_write_to_file(log, fd, mutex,
+ AXIS2_LOG_LEVEL_WARNING, filename, linenumber, value);
}
}
else
@@ -422,7 +474,7 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_ERROR,
+ axutil_log_impl_write_to_file(log, fd, mutex, AXIS2_LOG_LEVEL_ERROR,
filename, linenumber, value);
}
else
@@ -462,7 +514,7 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_CRITICAL,
+ axutil_log_impl_write_to_file(log, fd, mutex, AXIS2_LOG_LEVEL_CRITICAL,
filename, linenumber, value);
}
else
@@ -559,7 +611,7 @@
va_start(ap, format);
AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap);
va_end(ap);
- axutil_log_impl_write_to_file(fd, mutex, AXIS2_LOG_LEVEL_TRACE,
+ axutil_log_impl_write_to_file(log, fd, mutex, AXIS2_LOG_LEVEL_TRACE,
filename, linenumber, value);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org