diff --git a/bigbluebutton-html5/client/compatibility/kurento-extension.js b/bigbluebutton-html5/client/compatibility/kurento-extension.js
index af99d9c07bf9b33155e865aa68841acad46865ac..c55b99e2d164bf3c3c0fe24562825709c9a52674 100644
--- a/bigbluebutton-html5/client/compatibility/kurento-extension.js
+++ b/bigbluebutton-html5/client/compatibility/kurento-extension.js
@@ -95,7 +95,7 @@ KurentoManager.prototype.exitScreenShare = function () {
   if (typeof this.kurentoScreenshare !== 'undefined' && this.kurentoScreenshare) {
 
     if (this.kurentoScreenshare.logger !== null) {
-      this.kurentoScreenshare.logger.log('  [exitScreenShare] Exiting screensharing');
+      this.kurentoScreenshare.logger.info('  [exitScreenShare] Exiting screensharing');
     }
 
     if (this.kurentoScreenshare.ws !== null) {
@@ -120,7 +120,7 @@ KurentoManager.prototype.exitVideo = function () {
   if (typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
 
     if (this.kurentoVideo.logger !== null) {
-      this.kurentoVideo.logger.log('  [exitScreenShare] Exiting screensharing viewing');
+      this.kurentoVideo.logger.info('  [exitScreenShare] Exiting screensharing viewing');
     }
 
     if (this.kurentoVideo.ws !== null) {
@@ -141,7 +141,7 @@ KurentoManager.prototype.exitAudio = function () {
   if (typeof this.kurentoAudio !== 'undefined' && this.kurentoAudio) {
 
     if (this.kurentoAudio.logger !== null) {
-      this.kurentoAudio.logger.log('  [exitAudio] Exiting listen only audio');
+      this.kurentoAudio.logger.info('  [exitAudio] Exiting listen only audio');
     }
 
     if (this.kurentoAudio.ws !== null) {
@@ -218,7 +218,7 @@ Kurento.prototype.downscaleResolution = function (oldWidth, oldHeight) {
 Kurento.prototype.init = function () {
   const self = this;
   if ('WebSocket' in window) {
-    this.logger.log('this browser supports websockets');
+    this.logger.info('this browser supports websockets');
     this.ws = new WebSocket(this.wsUrl);
 
     this.ws.onmessage = this.onWSMessage.bind(this);
@@ -234,7 +234,7 @@ Kurento.prototype.init = function () {
       self.pingInterval = setInterval(self.ping.bind(self), self.PING_INTERVAL);
       self.mediaCallback();
     };
-  } else { this.logger.log('this browser does not support websockets'); }
+  } else { this.logger.info('this browser does not support websockets'); }
 };
 
 Kurento.prototype.onWSMessage = function (message) {
@@ -293,7 +293,7 @@ Kurento.prototype.onOfferPresenter = function (error, offerSdp) {
   const self = this;
 
   if (error) {
-    this.logger.log(`Kurento.prototype.onOfferPresenter Error ${error}`);
+    this.logger.info(`Kurento.prototype.onOfferPresenter Error ${error}`);
     this.onFail(error);
     return;
   }
@@ -310,7 +310,7 @@ Kurento.prototype.onOfferPresenter = function (error, offerSdp) {
     vw: this.width,
   };
 
-  this.logger.log("onOfferPresenter sending to screenshare server => ", { sdpOffer: message });
+  this.logger.info("onOfferPresenter sending to screenshare server => ", { sdpOffer: message });
   this.sendMessage(message);
 };
 
@@ -335,7 +335,7 @@ Kurento.prototype.startScreensharing = function () {
     sendSource: 'desktop',
   };
 
-  this.logger.log(" Peer options =>", options);
+  this.logger.info(" Peer options =>", options);
 
   let resolution;
   this.logger.debug(`Screenshare screen dimensions are ${this.width} x ${this.height}`);
@@ -350,13 +350,13 @@ Kurento.prototype.startScreensharing = function () {
 
   this.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, (error) => {
     if (error) {
-      this.logger.error("WebRtcPeerSendonly constructor error:", {error: error});
+      this.logger.error("WebRtcPeerSendonly constructor error:", {error});
       this.onFail(error);
       return kurentoManager.exitScreenShare();
     }
 
     this.webRtcPeer.generateOffer(this.onOfferPresenter.bind(this));
-    this.logger.log("Generated peer offer w/ options:", {options: options});
+    this.logger.info("Generated peer offer w/ options:", {options: options});
 
     const localStream = this.webRtcPeer.peerConnection.getLocalStreams()[0];
     localStream.getVideoTracks()[0].onended = function () {
@@ -371,7 +371,7 @@ Kurento.prototype.startScreensharing = function () {
 
 Kurento.prototype.onIceCandidate = function (candidate, role) {
   const self = this;
-  this.logger.log("Local candidate:", {candidate: candidate});
+  this.logger.info("Local candidate:", {candidate});
 
   const message = {
     id: this.ON_ICE_CANDIDATE_MSG,
@@ -421,7 +421,7 @@ Kurento.prototype.viewer = function () {
 Kurento.prototype.onOfferViewer = function (error, offerSdp) {
   const self = this;
   if (error) {
-    this.logger.log(`Kurento.prototype.onOfferViewer Error ${error}`);
+    this.logger.info(`Kurento.prototype.onOfferViewer Error ${error}`);
     return this.onFail();
   }
   const message = {
@@ -434,7 +434,7 @@ Kurento.prototype.onOfferViewer = function (error, offerSdp) {
     sdpOffer: offerSdp,
   };
 
-  this.logger.log("onOfferViewer sending to screenshare server: ", {sdpOffer: message.sdpOffer});
+  this.logger.info("onOfferViewer sending to screenshare server: ", {sdpOffer: message.sdpOffer});
   this.sendMessage(message);
 };
 
@@ -477,7 +477,7 @@ Kurento.prototype.listenOnly = function () {
 
 Kurento.prototype.onListenOnlyIceCandidate = function (candidate) {
   let self = this;
-  this.logger.debug("[onListenOnlyIceCandidate]", {candidate: candidate});
+  this.logger.debug("[onListenOnlyIceCandidate]", {candidate});
 
   var message = {
     id : this.ON_ICE_CANDIDATE_MSG,
@@ -508,7 +508,7 @@ Kurento.prototype.onOfferListenOnly = function (error, offerSdp) {
     internalMeetingId: self.internalMeetingId
   };
 
-  this.logger.debug("[onOfferListenOnly]", {message: message});
+  this.logger.debug("[onOfferListenOnly]", {message});
   this.sendMessage(message);
 };
 
@@ -566,12 +566,12 @@ Kurento.prototype.ping = function () {
 
 Kurento.prototype.sendMessage = function (message) {
   const jsonMessage = JSON.stringify(message);
-  this.logger.log("Sending message:", {message: message});
+  this.logger.info("Sending message:", {message});
   this.ws.send(jsonMessage);
 };
 
 Kurento.prototype.logger = function (obj) {
-  this.logger.log(obj);
+  this.logger.info(obj);
 };
 
 Kurento.prototype.logError = function (obj) {
@@ -583,7 +583,7 @@ Kurento.normalizeCallback = function (callback) {
   if (typeof callback === 'function') {
     return callback;
   }
-  this.logger.log(document.getElementById('BigBlueButton')[callback]);
+  this.logger.info(document.getElementById('BigBlueButton')[callback]);
   return function (args) {
     document.getElementById('BigBlueButton')[callback](args);
   };
diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
index f7c864f87b0760a92d2cd3c634ee4bf50cbc3bac..0eb4da4784aeda49ab372ff094f18d8e062ed1df 100644
--- a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
+++ b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js
@@ -2,7 +2,7 @@ import BaseAudioBridge from './base';
 import Auth from '/imports/ui/services/auth';
 import Users from '/imports/api/users';
 import { fetchWebRTCMappedStunTurnServers } from '/imports/utils/fetchStunTurnServers';
-import { log } from '/imports/ui/services/api';
+import logger from '/imports/startup/client/logger';
 
 const SFU_URL = Meteor.settings.public.kurento.wsUrl;
 const MEDIA = Meteor.settings.public.media;
@@ -16,11 +16,13 @@ const logFunc = (type, message, options) => {
   const userId = getUserId();
   const userName = getUsername();
 
-  log(type, message, Object.assign(options, {userId, userName, topic: options.topic || 'audio'}));
+  const topic = options.topic || 'audio';
+
+  logger[type](`[${type}.${topic}] ${message}`, Object.assign(options, {userId, userName, topic}));
 };
 
-const logger = {
-  log: function (message, options = {}) {
+const modLogger = {
+  info: function (message, options = {}) {
     logFunc('info', message, options);
   },
   error: function (message, options = {}) {
@@ -67,15 +69,15 @@ export default class KurentoAudioBridge extends BaseAudioBridge {
       try {
         iceServers = await fetchWebRTCMappedStunTurnServers(this.user.sessionToken);
       } catch (error) {
-        log('error', 'SFU audio bridge failed to fetch STUN/TURN info, using default');
+        logFunc('error', 'SFU audio bridge failed to fetch STUN/TURN info, using default');
       } finally {
-        console.log("iceServers", iceServers);
+        logFunc('info', "iceServers", iceServers);
         const options = {
           wsUrl: SFU_URL,
           userName: this.user.name,
           caleeName: `${GLOBAL_AUDIO_PREFIX}${this.voiceBridge}`,
           iceServers,
-	  logger,
+          logger: modLogger,
         };
 
         const onSuccess = ack => resolve(this.callback({ status: this.baseCallStates.started }));
diff --git a/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js b/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
index 05f5353511822c5a16f5d316f2f09213c91453ff..84af800dd2be559cc2ff378466221a49670056f1 100755
--- a/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
+++ b/bigbluebutton-html5/imports/api/screenshare/client/bridge/kurento.js
@@ -2,7 +2,7 @@ import Users from '/imports/api/users';
 import Auth from '/imports/ui/services/auth';
 import BridgeService from './service';
 import { fetchWebRTCMappedStunTurnServers } from '/imports/utils/fetchStunTurnServers';
-import { log } from '/imports/ui/services/api';
+import logger from '/imports/startup/client/logger';
 
 const SFU_CONFIG = Meteor.settings.public.kurento;
 const SFU_URL = SFU_CONFIG.wsUrl;
@@ -26,11 +26,13 @@ const logFunc = (type, message, options) => {
   const userId = getUserId();
   const userName = getUsername();
 
-  log(type, message, Object.assign(options, {userId, userName, topic: options.topic || 'screenshare'}));
+  const topic = options.topic || 'audio';
+
+  logger[type](`[${type}.${topic}] ${message}`, Object.assign(options, {userId, userName, topic}));
 };
 
-const logger = {
-  log: function (message, options = {}) {
+const modLogger = {
+  info: function (message, options = {}) {
     logFunc('info', message, options);
   },
   error: function (message, options = {}) {
@@ -39,6 +41,9 @@ const logger = {
   debug: function (message, options = {}) {
     logFunc('debug', message, options);
   },
+  warn: (message, options = {}) => {
+    logFunc('warn', message, options);
+  },
 };
 
 export default class KurentoScreenshareBridge {
@@ -53,7 +58,7 @@ export default class KurentoScreenshareBridge {
       const options = {
         wsUrl: SFU_URL,
         iceServers,
-        logger
+        logger: modLogger
       };
 
       window.kurentoWatchVideo(
@@ -85,7 +90,7 @@ export default class KurentoScreenshareBridge {
         chromeScreenshareSources: CHROME_SCREENSHARE_SOURCES,
         firefoxScreenshareSource: FIREFOX_SCREENSHARE_SOURCE,
         iceServers,
-        logger,
+        logger: modLogger,
       };
 
       window.kurentoShareScreen(
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
index 3374647f13ba234d4db3d839ebe6c85c78f2a8c0..f4dbd086e4a54db2154b5996138d812f53dfa5f6 100755
--- a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
@@ -1,6 +1,5 @@
 import React, { Component } from 'react';
 import { defineMessages, injectIntl } from 'react-intl';
-import { log } from '/imports/ui/services/api';
 import { notify } from '/imports/ui/services/notification';
 import VisibilityEvent from '/imports/utils/visibilityEvent';
 import logger from '/imports/startup/client/logger';
@@ -125,9 +124,9 @@ class VideoProvider extends Component {
 
   logger(type, message, options = {}) {
     const {userId, userName} = this.props;
+    const topic = options.topic || 'video';
 
-    log(type, message,
-      Object.assign(options, {userId, userName, topic: options.topic || 'video'}));
+    logger[type](`${type}.${topic}: ${message}`, Object.assign(options, {userId, userName, topic}));
   }
 
   _sendPauseStream(id, role, state) {
@@ -313,7 +312,7 @@ class VideoProvider extends Component {
         }
       });
     } else {
-      log('warn', '[startResponse] Message arrived after the peer was already thrown out, discarding it...');
+      this.logger('warn', '[startResponse] Message arrived after the peer was already thrown out, discarding it...');
     }
   }
 
@@ -381,7 +380,7 @@ class VideoProvider extends Component {
     try {
       iceServers = await fetchWebRTCMappedStunTurnServers(sessionToken);
     } catch (error) {
-      log('error', 'Video provider failed to fetch ice servers, using default');
+      this.logger('error', 'Video provider failed to fetch ice servers, using default');
     } finally {
       const videoConstraints = {
         width: {
@@ -542,7 +541,7 @@ class VideoProvider extends Component {
   attachVideoStream(id) {
     const video = this.videoTags[id];
     if (video == null) {
-      log('warn', 'Peer', id, 'has not been started yet');
+      this.logger('warn', 'Peer', id, 'has not been started yet');
       return;
     }
 
@@ -803,7 +802,7 @@ class VideoProvider extends Component {
         VideoService.joinedVideo();
       }
     } else {
-      log('warn', '[playStart] Message arrived after the peer was already thrown out, discarding it...');
+      this.logger('warn', '[playStart] Message arrived after the peer was already thrown out, discarding it...');
     }
   }
 
@@ -811,7 +810,7 @@ class VideoProvider extends Component {
     const { intl } = this.props;
     const { userId } = this.props;
     const { code, reason } = message;
-    log('debug', 'Received error from SFU:', code, reason, message.streamId, userId);
+    this.logger('debug', 'Received error from SFU:', code, reason, message.streamId, userId);
     if (message.streamId === userId) {
       this.unshareWebcam();
       this.notifyError(intl.formatMessage(intlSFUErrors[code]