diff --git a/mbtk/libgsw_lib/gsw_sim_interface.c b/mbtk/libgsw_lib/gsw_sim_interface.c
index b4c8873..b7d2d23 100755
--- a/mbtk/libgsw_lib/gsw_sim_interface.c
+++ b/mbtk/libgsw_lib/gsw_sim_interface.c
@@ -3,6 +3,8 @@
 #include <dlfcn.h>
 #include <time.h>
 #include "gsw_nw_interface.h"
+#include "gsw_log_interface.h"
+
 
 #define MBTK_BUFF_TEMP_SIZE_32  32
 #define MBTK_ERR_OK             0
@@ -85,100 +87,10 @@
 int (*mbtk_phone_number_get)(mbtk_info_handle_t* handle, void *phone_number);
 int (*mbtk_set_modem_fun)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info);
 int (*mbtk_sim_power_set)(int power);
-static void (*mbtk_log)(int level, const char *format, ...);
-static void (*mbtk_log_init)(char *path, char *tag);
 
-#ifndef LOG_ERR_LEVEL
-#define LOG_ERR_LEVEL  3      /* error conditions */
-#endif
-#ifndef LOG_WARN_LEVEL
-#define LOG_WARN_LEVEL 4   /* warning conditions */
-#endif
-#ifndef LOG_INFO_LEVEL
-#define LOG_INFO_LEVEL 6      /* informational */
-#endif
-#ifndef LOG_DEBUG_LEVEL
-#define LOG_DEBUG_LEVEL 7     /* debug-level messages */
-#endif
-#ifndef LOG_VERBOSE_LEVEL
-#define LOG_VERBOSE_LEVEL 8
-#endif
 
 #define GSW_SIM "[HAL][GSW_SIM]"
 
-#define LOGV(fmt, args ...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        mbtk_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGI(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        mbtk_log(LOG_INFO_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGD(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        mbtk_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGW(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        mbtk_log(LOG_WARN_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGE(fmt, args...) \
-    do{ \
-		char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        mbtk_log(LOG_ERR_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-
-
-
 static void *dlHandle_mbtk;
 
 
@@ -190,50 +102,38 @@
         return GSW_HAL_NORMAL_FAIL;
     }
 
-    mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");
-    if (mbtk_log_init == NULL) 
-    {
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");
-    if (mbtk_log == NULL) 
-    {
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
     mbtk_info_handle_get = (mbtk_info_handle_t* (*)(void))dlsym(dlHandle_mbtk, "mbtk_info_handle_get");
     if (mbtk_info_handle_get == NULL) 
     {
-        LOGE("mbtk_info_handle_get dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_info_handle_get dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_info_handle_free = (int (*)(mbtk_info_handle_t** handle))dlsym(dlHandle_mbtk, "mbtk_info_handle_free");
     if (mbtk_info_handle_free == NULL) 
     {
-        LOGE("mbtk_info_handle_free dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_info_handle_free dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_imsi_get = (int (*)(mbtk_info_handle_t* handle, void *imsi))dlsym(dlHandle_mbtk, "mbtk_imsi_get");
     if (mbtk_imsi_get == NULL) 
     {
-        LOGE("mbtk_imsi_get dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_imsi_get dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_iccid_get = (int (*)(mbtk_info_handle_t* handle, void *iccid))dlsym(dlHandle_mbtk, "mbtk_iccid_get");
     if (mbtk_iccid_get == NULL) 
     {
-        LOGE("mbtk_iccid_get dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_iccid_get dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_phone_number_get = (int (*)(mbtk_info_handle_t* handle, void *phone_number))dlsym(dlHandle_mbtk, "mbtk_phone_number_get");
     if (mbtk_phone_number_get == NULL) 
     {
-        LOGE("mbtk_phone_number_get dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_phone_number_get dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -241,25 +141,25 @@
     mbtk_sim_state_get = (int (*)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state))dlsym(dlHandle_mbtk, "mbtk_sim_state_get");
     if (mbtk_sim_state_get == NULL) 
     {
-        LOGE("mbtk_sim_state_get dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_sim_state_get dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_set_modem_fun = (int (*)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info))dlsym(dlHandle_mbtk, "mbtk_set_modem_fun");
     if (mbtk_set_modem_fun == NULL) 
     {
-        LOGE("mbtk_set_modem_fun dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_set_modem_fun dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
     mbtk_sim_power_set = (int (*)(int power))dlsym(dlHandle_mbtk, "mbtk_sim_power_set");
     if (mbtk_sim_power_set == NULL)
     {
-        LOGE("mbtk_sim_power_set dlsym fail\n");
+        LOGE(GSW_SIM,"mbtk_sim_power_set dlsym fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
-    LOGD("gsw_sim_api_import end\n");
+    LOGD(GSW_SIM,"gsw_sim_api_import end\n");
     return GSW_HAL_SUCCESS;
 }
 
@@ -281,19 +181,14 @@
     ret = gsw_sim_api_import();
     if(ret != GSW_HAL_SUCCESS)
     {
-        if(mbtk_log != NULL)
-        {
-            LOGE("gsw_sim_import fail\n");
-        }
+        LOGE(GSW_SIM,"gsw_sim_import fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
-    mbtk_log_init("syslog", "MBTK_RIL");
-
     sim_info_handle = mbtk_info_handle_get();
     if(sim_info_handle == NULL)
     {
-        LOGE("mbtk_info_handle_get fail\n");
+        LOGE(GSW_SIM,"mbtk_info_handle_get fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -321,7 +216,7 @@
     ret = mbtk_info_handle_free(&sim_info_handle);
     if(ret != GSW_HAL_SUCCESS)
     {
-        LOGE("mbtk_info_handle_free fail\n");
+        LOGE(GSW_SIM,"mbtk_info_handle_free fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -353,17 +248,17 @@
 
     mbtk_sim_state_enum sim = MBTK_SIM_ABSENT;
 
-    LOGD("mbtk_get_sim_status start\n");
+    LOGD(GSW_SIM,"mbtk_get_sim_status start\n");
     ret = mbtk_sim_state_get(sim_info_handle, &sim);
     if(ret)
     {
-        LOGE("[gsw_get_sim_status] mbtk_sim_state_get fail [err = %d].", ret);
+        LOGE(GSW_SIM,"[gsw_get_sim_status] mbtk_sim_state_get fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
 
     else
     {
-        LOGD("[gsw_get_sim_status] sim = %d\n", sim);
+        LOGD(GSW_SIM,"[gsw_get_sim_status] sim = %d\n", sim);
         switch (sim)
         {
             case MBTK_SIM_ABSENT:
@@ -424,20 +319,20 @@
 
     if(iccid == NULL)
     {
-        LOGE("iccid is NULL.");
+        LOGE(GSW_SIM,"iccid is NULL.");
         return GSW_HAL_ARG_INVALID;
     }
 
     if(len < GSW_SIM_ICCID_LENGTH)
     {
-        LOGE("iccid len is too short,len = %d\n", len);
+        LOGE(GSW_SIM,"iccid len is too short,len = %d\n", len);
         return GSW_HAL_NORMAL_FAIL;
     }
 
     ret = mbtk_iccid_get(sim_info_handle, (void *)iccid);
     if(ret != MBTK_ERR_OK)
     {
-        LOGE("[gsw_sim] mbtk_iccid_get fail [err = %d].", ret);
+        LOGE(GSW_SIM,"[gsw_sim] mbtk_iccid_get fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -463,20 +358,20 @@
 
     if(imsi == NULL)
     {
-        LOGE("imsi is NULL.");
+        LOGE(GSW_SIM,"imsi is NULL.");
         return GSW_HAL_ARG_INVALID;
     }
 
     if(len < GSW_SIM_IMSI_LENGTH)
     {
-        LOGE("imsi len is too short,len = %d\n", len);
+        LOGE(GSW_SIM,"imsi len is too short,len = %d\n", len);
         return GSW_HAL_NORMAL_FAIL;
     }
 
     ret = mbtk_imsi_get(sim_info_handle, (void *)imsi);
     if(ret != MBTK_ERR_OK)
     {
-        LOGE("[gsw_sim] mbtk_imsi_get fail [err = %d].", ret);
+        LOGE(GSW_SIM,"[gsw_sim] mbtk_imsi_get fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -515,7 +410,7 @@
     ret = mbtk_phone_number_get(sim_info_handle, (void *)msisdn);
     if(ret != MBTK_ERR_OK)
     {
-        LOGE("[gsw_sim] mbtk_phone_number_get fail [err = %d].", ret);
+        LOGE(GSW_SIM,"[gsw_sim] mbtk_phone_number_get fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -544,7 +439,7 @@
     ret = mbtk_set_modem_fun(sim_info_handle, &info);
     if(ret)
     {
-        LOGE("mbtk_set_modem_fun() fail [err = %d].", ret);
+        LOGE(GSW_SIM,"mbtk_set_modem_fun() fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -575,7 +470,7 @@
     ret = mbtk_set_modem_fun(sim_info_handle, &info);
     if(ret)
     {
-        LOGE("mbtk_set_modem_fun() fail [err = %d].", ret);
+        LOGE(GSW_SIM,"mbtk_set_modem_fun() fail [err = %d].", ret);
         return GSW_HAL_NORMAL_FAIL;
     }
     
