diff --git a/ipacm/inc/IPACM_Log.h b/ipacm/inc/IPACM_Log.h
index c54d05b..d468f96 100644
--- a/ipacm/inc/IPACM_Log.h
+++ b/ipacm/inc/IPACM_Log.h
@@ -50,23 +50,31 @@
 #include <string.h>
 #include <syslog.h>
 
-#define PERROR(fmt)   printf("%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
+#define MAX_BUF_LEN 256
+#define IPACMLOG_FILE "/etc/ipacm_log_file"
+
+typedef struct ipacm_log_buffer_s {
+	char	user_data[MAX_BUF_LEN];
+} ipacm_log_buffer_t;
+
+void ipacm_log_send( void * user_data);
+
+static char buffer_send[MAX_BUF_LEN];
+
+#define PERROR(fmt)   memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+					  snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
+					  ipacm_log_send (buffer_send); \
                       perror(fmt);
 
-#define IPACMERR(fmt, ...) syslog(LOG_ERR, "ERROR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
-                           printf("ERR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
-
-#ifdef DEBUG
-#define IPACMDBG(fmt, ...) syslog(LOG_DEBUG, "%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
-                           printf("%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
-
-#define IPACMLOG(fmt, ...) syslog(LOG_DEBUG, fmt, ##__VA_ARGS__);\
-                           printf(fmt, ##__VA_ARGS__);
-#else
-#define IPACMDBG(fmt, ...)
-#define IPACMLOG(fmt, ...)
-#endif
-
+#define IPACMERR(fmt, ...)	memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+							snprintf(buffer_send,MAX_BUF_LEN,"ERR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+							ipacm_log_send (buffer_send);
+#define IPACMDBG(fmt, ...)	memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+							snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+							ipacm_log_send (buffer_send);
+#define IPACMLOG(fmt, ...)      memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+                                                        snprintf(buffer_send,MAX_BUF_LEN, fmt, ##__VA_ARGS__);\
+                                                        ipacm_log_send (buffer_send);
 
 #ifdef __cplusplus
 }
diff --git a/ipacm/src/IPACM_Log.cpp b/ipacm/src/IPACM_Log.cpp
index 72f71c5..20dd26c 100644
--- a/ipacm/src/IPACM_Log.cpp
+++ b/ipacm/src/IPACM_Log.cpp
@@ -40,10 +40,68 @@
 #include "IPACM_Log.h"
 #include <stdlib.h>
 #include <unistd.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <asm/types.h>
+#include <linux/if.h>
+#include <sys/un.h>
+#include <errno.h>
+#include <IPACM_Defs.h>
 
 void logmessage(int log_level)
 {
 	return;
 }
 
+/* start IPACMDIAG socket*/
+int create_socket(unsigned int *sockfd)
+{
 
+  if ((*sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) == IPACM_FAILURE)
+  {
+    perror("Error creating ipacm_log socket\n");
+    return IPACM_FAILURE;
+  }
+
+  if(fcntl(*sockfd, F_SETFD, FD_CLOEXEC) < 0)
+  {
+    perror("Couldn't set ipacm_log Close on Exec\n");
+  }
+
+  return IPACM_SUCCESS;
+}
+
+void ipacm_log_send( void * user_data)
+{
+	ipacm_log_buffer_t ipacm_log_buffer;
+	int numBytes=0, len;
+	struct sockaddr_un ipacmlog_socket;
+	static unsigned int ipacm_log_sockfd = 0;
+
+	if(ipacm_log_sockfd == 0)
+	{
+		/* start ipacm_log socket */
+		if(create_socket(&ipacm_log_sockfd) < 0)
+		{
+			printf("unable to create ipacm_log socket\n");
+			return;
+		}
+		printf("create ipacm_log socket successfully\n");
+	}
+	ipacmlog_socket.sun_family = AF_UNIX;
+	strcpy(ipacmlog_socket.sun_path, IPACMLOG_FILE);
+	len = strlen(ipacmlog_socket.sun_path) + sizeof(ipacmlog_socket.sun_family);
+
+	memcpy(ipacm_log_buffer.user_data, user_data, MAX_BUF_LEN);
+
+	//printf("send : %s\n", ipacm_log_buffer.user_data);
+	if ((numBytes = sendto(ipacm_log_sockfd, (void *)&ipacm_log_buffer, sizeof(ipacm_log_buffer.user_data), 0,
+			(struct sockaddr *)&ipacmlog_socket, len)) == -1)
+	{
+		printf("Send Failed(%d) %s \n",errno,strerror(errno));
+		return;
+	}
+	return;
+}
