diff --git a/src/include/switch_cpp.h b/src/include/switch_cpp.h
index 5a372c3cdb..9ccb04d39e 100644
--- a/src/include/switch_cpp.h
+++ b/src/include/switch_cpp.h
@@ -71,6 +71,7 @@ SWITCH_DECLARE(char *) getGlobalVariable(char *var_name);
 
 SWITCH_DECLARE(void) consoleLog(char *level_str, char *msg);
 SWITCH_DECLARE(void) consoleCleanLog(char *msg);
+SWITCH_DECLARE(void) consoleChannelLog(char *level_str, char *file, char *func, int line, char *msg);
 SWITCH_DECLARE(bool) running(void);
 
 SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *body = NULL,
@@ -398,6 +399,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
 
 SWITCH_DECLARE(void) console_log(char *level_str, char *msg);
 SWITCH_DECLARE(void) console_clean_log(char *msg);
+SWITCH_DECLARE(void) console_channel_log(char *level_str, char *file, char *func, int line, char *msg);
 SWITCH_DECLARE(void) switch_msleep(unsigned ms);
 
 /** \brief bridge the audio of session_b into session_a
diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.cxx
index 504e121dbb..22c248e64d 100644
--- a/src/mod/languages/mod_managed/freeswitch_wrap.cxx
+++ b/src/mod/languages/mod_managed/freeswitch_wrap.cxx
@@ -41826,6 +41826,22 @@ SWIGEXPORT void SWIGSTDCALL CSharp_consoleCleanLog(char * jarg1) {
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_consoleChannelLog(char * jarg1, char * jarg2, char * jarg3, int jarg4, char * jarg5) {
+  char *arg1 = (char *) 0 ;
+  char *arg2 = (char *) 0 ;
+  char *arg3 = (char *) 0 ;
+  int arg4 ;
+  char *arg5 = (char *) 0 ;
+  
+  arg1 = (char *)jarg1; 
+  arg2 = (char *)jarg2; 
+  arg3 = (char *)jarg3; 
+  arg4 = (int)jarg4; 
+  arg5 = (char *)jarg5; 
+  consoleChannelLog(arg1,arg2,arg3,arg4,arg5);
+}
+
+
 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_running() {
   unsigned int jresult ;
   bool result;
@@ -43648,6 +43664,22 @@ SWIGEXPORT void SWIGSTDCALL CSharp_console_clean_log(char * jarg1) {
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_console_channel_log(char * jarg1, char * jarg2, char * jarg3, int jarg4, char * jarg5) {
+  char *arg1 = (char *) 0 ;
+  char *arg2 = (char *) 0 ;
+  char *arg3 = (char *) 0 ;
+  int arg4 ;
+  char *arg5 = (char *) 0 ;
+  
+  arg1 = (char *)jarg1; 
+  arg2 = (char *)jarg2; 
+  arg3 = (char *)jarg3; 
+  arg4 = (int)jarg4; 
+  arg5 = (char *)jarg5; 
+  console_channel_log(arg1,arg2,arg3,arg4,arg5);
+}
+
+
 SWIGEXPORT void SWIGSTDCALL CSharp_msleep(unsigned int jarg1) {
   unsigned int arg1 ;
   
diff --git a/src/mod/languages/mod_managed/managed/swig.cs b/src/mod/languages/mod_managed/managed/swig.cs
index 45d4521899..c628160b7e 100644
--- a/src/mod/languages/mod_managed/managed/swig.cs
+++ b/src/mod/languages/mod_managed/managed/swig.cs
@@ -6859,6 +6859,10 @@ public class freeswitch {
     freeswitchPINVOKE.consoleCleanLog(msg);
   }
 
+  public static void consoleChannelLog(string level_str, string file, string func, int line, string msg) {
+    freeswitchPINVOKE.consoleChannelLog(level_str, file, func, line, msg);
+  }
+
   public static bool running() {
     bool ret = freeswitchPINVOKE.running();
     return ret;
@@ -6877,6 +6881,10 @@ public class freeswitch {
     freeswitchPINVOKE.console_clean_log(msg);
   }
 
+  public static void console_channel_log(string level_str, string file, string func, int line, string msg) {
+    freeswitchPINVOKE.console_channel_log(level_str, file, func, line, msg);
+  }
+
   public static void msleep(uint ms) {
     freeswitchPINVOKE.msleep(ms);
   }
@@ -17392,6 +17400,9 @@ class freeswitchPINVOKE {
   [DllImport("mod_managed", EntryPoint="CSharp_consoleCleanLog")]
   public static extern void consoleCleanLog(string jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_consoleChannelLog")]
+  public static extern void consoleChannelLog(string jarg1, string jarg2, string jarg3, int jarg4, string jarg5);
+
   [DllImport("mod_managed", EntryPoint="CSharp_running")]
   public static extern bool running();
 
@@ -17812,6 +17823,9 @@ class freeswitchPINVOKE {
   [DllImport("mod_managed", EntryPoint="CSharp_console_clean_log")]
   public static extern void console_clean_log(string jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_console_channel_log")]
+  public static extern void console_channel_log(string jarg1, string jarg2, string jarg3, int jarg4, string jarg5);
+
   [DllImport("mod_managed", EntryPoint="CSharp_msleep")]
   public static extern void msleep(uint jarg1);
 
diff --git a/src/mod/languages/mod_perl/mod_perl_wrap.cpp b/src/mod/languages/mod_perl/mod_perl_wrap.cpp
index a7c2a690bd..d34db2d079 100644
--- a/src/mod/languages/mod_perl/mod_perl_wrap.cpp
+++ b/src/mod/languages/mod_perl/mod_perl_wrap.cpp
@@ -10272,17 +10272,17 @@ XS(SWIG_init) {
   SWIG_TypeClientData(SWIGTYPE_p_IVRMenu, (void*) "freeswitch::IVRMenu");
   SWIG_TypeClientData(SWIGTYPE_p_API, (void*) "freeswitch::API");
   SWIG_TypeClientData(SWIGTYPE_p_input_callback_state, (void*) "freeswitch::input_callback_state_t");
-  /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
+  /*@SWIG://share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "S_HUP", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_HUP)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
-  /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
+  /*@SWIG://share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "S_FREE", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_FREE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
-  /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
+  /*@SWIG://share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "S_RDLOCK", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_RDLOCK)));
     SvREADONLY_on(sv);
diff --git a/src/switch_cpp.cpp b/src/switch_cpp.cpp
index 3c73536454..38481fd635 100644
--- a/src/switch_cpp.cpp
+++ b/src/switch_cpp.cpp
@@ -1279,6 +1279,11 @@ SWITCH_DECLARE(void) consoleCleanLog(char *msg)
 	return console_clean_log(msg);
 }
 
+SWITCH_DECLARE(void) consoleChannelLog(char *level_str, char *file, char *func, int line, char *msg)
+{
+    return console_channel_log(level_str, file, func, line, msg);
+}
+
 SWITCH_DECLARE(void) console_log(char *level_str, char *msg)
 {
     switch_log_level_t level = SWITCH_LOG_DEBUG;
@@ -1296,6 +1301,18 @@ SWITCH_DECLARE(void) console_clean_log(char *msg)
     switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN,SWITCH_LOG_DEBUG, "%s", switch_str_nil(msg));
 }
 
+SWITCH_DECLARE(void) console_channel_log(char *level_str, char *file, char *func, int line, char *msg)
+{
+    switch_log_level_t level = SWITCH_LOG_DEBUG;
+    if (level_str) {
+        level = switch_log_str2level(level_str);
+        if (level == SWITCH_LOG_INVALID) {
+            level = SWITCH_LOG_DEBUG;
+        }
+    }
+    switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, level, "%s", switch_str_nil(msg));
+}
+
 SWITCH_DECLARE(bool) email(char *to, char *from, char *headers, char *body, char *file, char *convert_cmd, char *convert_ext)
 {
     if (switch_simple_email(to, from, headers, body, file, convert_cmd, convert_ext) == SWITCH_TRUE) {