From 3fcb95ab4475da5bdce0cec06c9bbfc53874b63f Mon Sep 17 00:00:00 2001
From: Anton Georgiev <anto.georgiev@gmail.com>
Date: Fri, 28 Jun 2019 21:45:50 +0000
Subject: [PATCH] log structure {logCode, extraInfo}, comment

---
 .../imports/api/audio/client/bridge/sip.js    | 28 +++++--
 .../actions-bar/desktop-share/component.jsx   |  7 +-
 .../imports/ui/components/app/component.jsx   |  1 -
 .../audio/device-selector/component.jsx       | 41 ++++++----
 .../ui/components/captions/pad/component.jsx  |  5 +-
 .../external-video-player/component.jsx       | 14 +++-
 .../ui/components/join-handler/component.jsx  | 21 ++++-
 .../ui/components/meeting-ended/component.jsx |  4 +-
 .../presentation-uploader/component.jsx       |  5 +-
 .../ui/components/subscriptions/component.jsx |  5 +-
 .../ui/components/video-preview/component.jsx | 80 ++++++++++++++++---
 .../components/video-provider/component.jsx   |  4 +-
 .../video-list/video-list-item/component.jsx  |  8 +-
 .../ui/components/whiteboard/service.js       | 20 ++---
 .../ui/services/audio-manager/index.js        | 21 ++++-
 .../ui/services/network-information/index.js  |  7 +-
 16 files changed, 206 insertions(+), 65 deletions(-)

diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
index cabc27c16c..12a66f846e 100755
--- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
+++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
@@ -42,7 +42,10 @@ class SIPSession {
         // There will sometimes we erroneous errors put out like timeouts and improper shutdowns,
         // but only the first error ever matters
         if (this.alreadyErrored) {
-          logger.info({ logCode: 'sip_js_absorbing_callback_message' }, `Absorbing a redundant callback message. ${JSON.stringify(message)}`);
+          logger.info({
+            logCode: 'sip_js_absorbing_callback_message',
+            extraInfo: { message },
+          }, 'Absorbing a redundant callback message.');
           return;
         }
 
@@ -97,7 +100,7 @@ class SIPSession {
 
       const timeout = setInterval(() => {
         clearInterval(timeout);
-        logger.error({ logCode: 'sip_js_transfer_timed_out' }, 'Timeout on transfering from echo test to conference');
+        logger.error({ logCode: 'sip_js_transfer_timed_out' }, 'Timeout on transferring from echo test to conference');
         this.callback({
           status: this.baseCallStates.failed,
           error: 1008,
@@ -188,15 +191,15 @@ class SIPSession {
       // translation
       const isSafari = browser().name === 'safari';
 
-      logger.debug('Creating the user agent');
+      logger.debug({ logCode: 'creating_user_agent' }, 'Creating the user agent');
 
       if (this.userAgent && this.userAgent.isConnected()) {
         if (this.userAgent.configuration.hostPortParams === this.hostname) {
-          logger.debug('Reusing the user agent');
+          logger.debug({ logCode: 'reusing_user_agent' }, 'Reusing the user agent');
           resolve(this.userAgent);
           return;
         }
-        logger.debug('different host name. need to kill');
+        logger.debug({ logCode: 'different_host_name' }, 'Different host name. need to kill');
       }
 
       let userAgentConnected = false;
@@ -348,7 +351,10 @@ class SIPSession {
       currentSession.on('progress', handleSessionProgress);
 
       const handleConnectionCompleted = (peer) => {
-        logger.info({ logCode: 'sip_js_ice_connection_success' }, `ICE connection success. Current state - ${peer.iceConnectionState}`);
+        logger.info({
+          logCode: 'sip_js_ice_connection_success',
+          extraInfo: { currentState: peer.iceConnectionState },
+        }, `ICE connection success. Current state - ${peer.iceConnectionState}`);
         clearTimeout(callTimeout);
         clearTimeout(iceNegotiationTimeout);
         connectionCompletedEvents.forEach(e => mediaHandler.off(e, handleConnectionCompleted));
@@ -369,7 +375,10 @@ class SIPSession {
           });
         }
 
-        logger.error({ logCode: 'sip_js_call_terminated' }, `Audio call terminated. cause=${cause}`);
+        logger.error({
+          logCode: 'sip_js_call_terminated',
+          extraInfo: { cause },
+        }, `Audio call terminated. cause=${cause}`);
 
         let mappedCause;
         if (!iceCompleted) {
@@ -592,7 +601,10 @@ export default class SIPBridge extends BaseAudioBridge {
         await audioContext.setSinkId(value);
         this.media.outputDeviceId = value;
       } catch (err) {
-        logger.error({ logCode: 'audio_sip_changeoutputdevice_error' }, err);
+        logger.error({
+          logCode: 'audio_sip_changeoutputdevice_error',
+          extraInfo: { error: err },
+        }, 'Change Output Device error');
         throw new Error(this.baseErrorCodes.MEDIA_ERROR);
       }
     }
diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
index 93a266679d..1b35a4b52e 100755
--- a/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/actions-bar/desktop-share/component.jsx
@@ -72,7 +72,12 @@ const DesktopShare = ({
         notify(intl.formatMessage(intlMessages.iceConnectionStateError), 'error', 'desktop');
         break;
       default:
-        logger.error({ logCode: 'desktopshare_default_error' }, error || 'Default error handler');
+        logger.error({
+          logCode: 'desktopshare_default_error',
+          extraInfo: {
+            maybeError: error || 'Default error handler',
+          },
+        }, 'Default error handler for screenshare');
     }
     screenShareEndAlert();
   };
diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx
index 1480cff609..e5edf8b22b 100755
--- a/bigbluebutton-html5/imports/ui/components/app/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx
@@ -141,7 +141,6 @@ class App extends Component {
       startBandwidthMonitoring();
     }
 
-
     logger.info({ logCode: 'app_component_componentdidmount' }, 'Client loaded successfully');
   }
 
diff --git a/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
index 4b8cba49aa..fbee2dd8df 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/device-selector/component.jsx
@@ -3,8 +3,8 @@ import _ from 'lodash';
 import PropTypes from 'prop-types';
 import cx from 'classnames';
 import logger from '/imports/startup/client/logger';
-import { styles } from '../audio-modal/styles';
 import browser from 'browser-detect';
+import { styles } from '../audio-modal/styles';
 
 const propTypes = {
   kind: PropTypes.oneOf(['audioinput', 'audiooutput', 'videoinput']),
@@ -33,13 +33,20 @@ class DeviceSelector extends Component {
   }
 
   componentDidMount() {
+    const { kind } = this.props;
     const handleEnumerateDevicesSuccess = (deviceInfos) => {
-      const devices = deviceInfos.filter(d => d.kind === this.props.kind);
-      logger.info({ logCode: 'audiodeviceselector_component_enumeratedevices_success' }, `Success on enumerateDevices() for ${this.props.kind}: ${JSON.stringify(devices)}`);
+      const devices = deviceInfos.filter(d => d.kind === kind);
+      logger.info({
+        logCode: 'audiodeviceselector_component_enumeratedevices_success',
+        extraInfo: {
+          deviceKind: kind,
+          devices,
+        },
+      }, 'Success on enumerateDevices() for audio');
       this.setState({
         devices,
         options: devices.map((d, i) => ({
-          label: d.label || `${this.props.kind} - ${i}`,
+          label: d.label || `${kind} - ${i}`,
           value: d.deviceId,
           key: _.uniqueId('device-option-'),
         })),
@@ -50,15 +57,20 @@ class DeviceSelector extends Component {
       .enumerateDevices()
       .then(handleEnumerateDevicesSuccess)
       .catch((err) => {
-        logger.error({ logCode: 'audiodeviceselector_component_enumeratedevices_error' }, `Error on enumerateDevices(): ${JSON.stringify(err)}`);
+        logger.error({
+          logCode: 'audiodeviceselector_component_enumeratedevices_error',
+          extraInfo: {
+            deviceKind: kind,
+          },
+        }, 'Error on enumerateDevices(): ');
       });
   }
 
   handleSelectChange(event) {
     const { value } = event.target;
-    const { onChange } = this.props;
+    const { onChange, devices } = this.props;
     this.setState({ value }, () => {
-      const selectedDevice = this.state.devices.find(d => d.deviceId === value);
+      const selectedDevice = devices.find(d => d.deviceId === value);
       onChange(selectedDevice.deviceId, selectedDevice, event);
     });
   }
@@ -79,20 +91,19 @@ class DeviceSelector extends Component {
         className={cx(styles.select, className)}
       >
         {
-          options.length ?
-            options.map(option => (
+          options.length
+            ? options.map(option => (
               <option
                 key={option.key}
                 value={option.value}
               >
                 {option.label}
               </option>
-            )) :
-            (
-              (kind == 'audiooutput' && browser().name == 'safari') ?
-                <option value="not-found">Default</option>
-              :
-                <option value="not-found">{`no ${kind} found`}</option>
+            ))
+            : (
+              (kind == 'audiooutput' && browser().name == 'safari')
+                ? <option value="not-found">Default</option>
+                : <option value="not-found">{`no ${kind} found`}</option>
             )
         }
       </select>
diff --git a/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx b/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
index 23fcd6b55a..0330d2189e 100644
--- a/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
@@ -157,7 +157,10 @@ class Pad extends PureComponent {
       };
 
       this.recognition.onerror = (event) => {
-        logger.error({ logCode: 'captions_recognition' }, event.error);
+        logger.error({
+          logCode: 'captions_recognition',
+          extraInfo: { error: event.error },
+        }, 'Captions pad error on recognition');
       };
     }
   }
diff --git a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
index f6c4d668a7..d9400ffe29 100644
--- a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
@@ -135,12 +135,22 @@ class VideoPlayer extends Component {
 
         if (data.rate !== this.player.getPlaybackRate()) {
           this.player.setPlaybackRate(data.rate);
-          logger.debug({ logCode: 'external_video_client_update_rate' }, 'Change external video playback rate to:', data.rate);
+          logger.debug({
+            logCode: 'external_video_client_update_rate',
+            extraInfo: {
+              rate: data.rate,
+            },
+          }, 'Change external video playback rate to:');
         }
 
         if (Math.abs(this.player.getCurrentTime() - data.time) > SYNC_INTERVAL_SECONDS) {
           this.player.seekTo(data.time, true);
-          logger.debug({ logCode: 'external_video_client_update_seek' }, 'Seek external video to:', data.time);
+          logger.debug({
+            logCode: 'external_video_client_update_seek',
+            extraInfo: {
+              time: data.time,
+            },
+          }, 'Seek external video to:');
         }
 
         if (this.playerState !== data.state) {
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
index a038e3ff53..135c280c85 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
@@ -66,7 +66,11 @@ class JoinHandler extends Component {
         location: window.location.href,
       };
 
-      logger.info({ logCode: 'joinhandler_component_clientinfo' }, clientInfo);
+      logger.info({
+        logCode: 'joinhandler_component_clientinfo',
+        extraInfo: { clientInfo },
+      },
+      'Log informatin about the client');
     };
 
     const setAuth = (resp) => {
@@ -135,11 +139,22 @@ class JoinHandler extends Component {
         Session.set('openPanel', '');
       }
 
-      logger.info({ logCode: 'joinhandler_component_joinroutehandler_success' }, `User successfully went through main.joinRouteHandler with [${JSON.stringify(response)}].`);
+      logger.info({
+        logCode: 'joinhandler_component_joinroutehandler_success',
+        extraInfo: {
+          response,
+        },
+      }, 'User successfully went through main.joinRouteHandler');
     } else {
       const e = new Error(response.message);
       if (!Session.get('codeError')) Session.set('errorMessageDescription', response.message);
-      logger.error({ logCode: 'joinhandler_component_joinroutehandler_error' }, `User faced [${e}] on main.joinRouteHandler. Error was:`, JSON.stringify(response));
+      logger.error({
+        logCode: 'joinhandler_component_joinroutehandler_error',
+        extraInfo: {
+          response,
+          error: e,
+        },
+      }, 'User faced an error on main.joinRouteHandler.');
     }
     this.changeToJoin(true);
   }
diff --git a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
index af697fdc5d..64393e6f25 100755
--- a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
@@ -142,7 +142,7 @@ class MeetingEnded extends React.PureComponent {
     };
 
     // client logger
-    logger.info({ feedback: message, logCode: 'feedback' }, 'Feedback');
+    logger.info({ logCode: 'feedback_functionality', extraInfo: { feedback: message } }, 'Feedback component');
 
     const FEEDBACK_WAIT_TIME = 500;
     setTimeout(() => {
@@ -164,7 +164,7 @@ class MeetingEnded extends React.PureComponent {
 
     const noRating = selected <= 0;
 
-    logger.info({ endedCode: code, logCode: 'meeting_ended_code' }, code);
+    logger.info({ logCode: 'meeting_ended_code', extraInfo: { endedCode: code } }, 'Meeting ended component');
 
     return (
       <div className={styles.parent}>
diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
index 62d3db60b7..9d579f4692 100755
--- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx
@@ -294,7 +294,10 @@ class PresentationUploader extends Component {
       })
       .catch((error) => {
         notify(intl.formatMessage(intlMessages.genericError), 'error');
-        logger.error({ logCode: 'presentationuploader_component_save_error' }, error);
+        logger.error({
+          logCode: 'presentationuploader_component_save_error',
+          extraInfo: { error },
+        }, 'Presentation uploader catch error on confirm');
 
         this.setState({
           disableActions: false,
diff --git a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
index 95db3ea25c..d5bc4124af 100644
--- a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
@@ -43,7 +43,10 @@ export default withTracker(() => {
   }
   const subscriptionErrorHandler = {
     onError: (error) => {
-      logger.error({ logCode: 'startup_client_subscription_error' }, error);
+      logger.error({
+        logCode: 'startup_client_subscription_error',
+        extraInfo: { error },
+      }, 'Error while subscribing to collections');
       Session.set('codeError', error.error);
     },
   };
diff --git a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
index 0946f0baf3..3391b4ba15 100755
--- a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx
@@ -220,7 +220,13 @@ class VideoPreview extends Component {
         if (!this._isMounted) return;
 
         // webcam might no longer exist or be available
-        logger.debug(`Error with profile: ${CAMERA_PROFILES[currNum].name}`);
+        logger.debug({
+          logCode: 'video_preview_check_webcam',
+          extraInfo: {
+            camProfile: CAMERA_PROFILES[currNum],
+            currNum,
+          },
+        }, 'Error with camera profile');
 
         this.handleGUMError(error);
 
@@ -234,13 +240,27 @@ class VideoPreview extends Component {
         this.doGUM(deviceId, CAMERA_PROFILES[currNum]).then((stream) => {
           if (!this._isMounted) return;
 
-          logger.debug(`Display preview came back for profile: ${CAMERA_PROFILES[currNum].name}`);
+          logger.debug({
+            logCode: 'video_preview_next_profile',
+            extraInfo: {
+              camProfile: CAMERA_PROFILES[currNum],
+              currNum,
+            },
+          }, 'Display preview came back');
+
           this.video.srcObject = stream;
           this.deviceStream = stream;
         }).catch((error) => {
           if (!this._isMounted) return;
 
-          logger.debug(`Error with fetching profile {${CAMERA_PROFILES[currNum].name}} skipping to next profile. Error is {${error.name}}`);
+          logger.debug({
+            logCode: 'video_preview_next_profile',
+            extraInfo: {
+              camProfile: CAMERA_PROFILES[currNum],
+              currNum,
+              error,
+            },
+          }, 'Error with fetching profile, skipping to next');
           currNum++;
           nextProfile();
         });
@@ -260,10 +280,22 @@ class VideoPreview extends Component {
       if (this.video.videoWidth !== previousWidth || this.video.videoHeight !== previousHeight) {
         previousWidth = this.video.videoWidth;
         previousHeight = this.video.videoHeight;
-        logger.debug(`Found profile ${CAMERA_PROFILES[currNum].name}`);
+        logger.debug({
+          logCode: 'video_preview_found_profile',
+          extraInfo: {
+            camProfile: CAMERA_PROFILES[currNum],
+            currNum,
+          },
+        }, 'Found profile');
         availableProfiles.push(CAMERA_PROFILES[currNum]);
       } else {
-        logger.debug(`Not including profile ${CAMERA_PROFILES[currNum].name}`);
+        logger.debug({
+          logCode: 'video_preview_not_including_profile',
+          extraInfo: {
+            camProfile: CAMERA_PROFILES[currNum],
+            currNum,
+          },
+        }, 'Not including profile');
       }
 
       currNum++;
@@ -276,7 +308,12 @@ class VideoPreview extends Component {
       if (availableProfiles.length > 0) {
         const defaultProfile = availableProfiles.find(profile => profile.default)
           || availableProfiles[0];
-        logger.debug(`Found default profile: ${JSON.stringify(defaultProfile)}`);
+        logger.debug({
+          logCode: 'video_preview_found_default_profile',
+          extraInfo: {
+            defaultProfile,
+          },
+        }, 'Found default profile');
 
         this.displayPreview(deviceId, defaultProfile);
       }
@@ -321,8 +358,12 @@ class VideoPreview extends Component {
       this.video.srcObject = stream;
       this.deviceStream = stream;
     }).catch((error) => {
-      logger.warning({ logCode: 'video_preview_error' }, `Error displaying final selection. name: [${error.name}] message: [${error.message}]`);
-      // logger.debug(error);
+      logger.warning({
+        logCode: 'video_preview_do_gum_preview_error',
+        extraInfo: {
+          error,
+        },
+      }, 'Error displaying final selection.');
     });
   }
 
@@ -353,7 +394,14 @@ class VideoPreview extends Component {
             }
           });
 
-          logger.debug(`Enumerate devices came back. There are ${devices.length} devices and ${webcams.length} are video inputs`);
+          logger.debug({
+            logCode: 'video_preview_enumerate_devices',
+            extraInfo: {
+              devices,
+              webcams,
+            },
+          }, `Enumerate devices came back. There are ${devices.length} devices and ${webcams.length} are video inputs`);
+
 
           if (initialDeviceId) {
             this.setState({
@@ -364,13 +412,23 @@ class VideoPreview extends Component {
           }
         }).catch((error) => {
           // CHANGE THIS TO SOMETHING USEFUL
-          logger.warning(`Error enumerating devices. name: [${error.name}] message: [${error.message}]`);
+          logger.warning({
+            logCode: 'video_preview_enumerate_error',
+            extraInfo: {
+              error,
+            },
+          }, 'Error enumerating devices');
           this.handleGUMError(error);
         });
       });
     } catch (error) {
       // CHANGE THIS TO SOMETHING USEFUL
-      logger.warning(`Error grabbing initial video stream. name: [${error.name}] message: [${error.message}]`);
+      logger.warning({
+        logCode: 'video_preview_grabbing_error',
+        extraInfo: {
+          error,
+        },
+      }, 'Error grabbing initial video stream');
       this.handleGUMError(error);
     }
   }
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
index 6206696881..4afc42391b 100755
--- a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
@@ -356,7 +356,7 @@ class VideoProvider extends Component {
     this.logger('debug', 'Calling pause in viewer streams', 'video_provider_pause_viewers');
 
     Object.keys(this.webRtcPeers).forEach((id) => {
-      if (userId !== id && this.webRtcPeers[id].started) {
+      if (userId !== id && this.webRtcPeers[id] && this.webRtcPeers[id].started) {
         this._sendPauseStream(id, 'viewer', true);
       }
     });
@@ -367,7 +367,7 @@ class VideoProvider extends Component {
     this.logger('debug', 'Calling un-pause in viewer streams', 'video_provider_unpause_viewers');
 
     Object.keys(this.webRtcPeers).forEach((id) => {
-      if (id !== userId && this.webRtcPeers[id].started) {
+      if (id !== userId && this.webRtcPeers[id] && this.webRtcPeers[id].started) {
         this._sendPauseStream(id, 'viewer', false);
       }
     });
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
index 5a67965a6d..c58783738b 100755
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
@@ -53,10 +53,10 @@ class VideoListItem extends Component {
         if (p && (typeof Promise !== 'undefined') && (p instanceof Promise)) {
           // Catch exception when playing video
           p.catch((e) => {
-            logger.warn(
-              { logCode: 'videolistitem_component_play_error' },
-              `Could not play video: ${JSON.stringify(e)}`,
-            );
+            logger.warning({
+              logCode: 'videolistitem_component_play_error',
+              extraInfo: { error: e },
+            }, 'Could not play video');
           });
         }
       }
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js b/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
index 3b08dbf87e..714142f974 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
@@ -43,8 +43,8 @@ function handleAddedAnnotation({
       Annotations.update(fakeAnnotation._id, {
         $set: {
           position: annotation.position,
-          'annotationInfo.color': isEqual(fakePoints, lastPoints) || annotation.status === DRAW_END ?
-            annotation.annotationInfo.color : fakeAnnotation.annotationInfo.color,
+          'annotationInfo.color': isEqual(fakePoints, lastPoints) || annotation.status === DRAW_END
+            ? annotation.annotationInfo.color : fakeAnnotation.annotationInfo.color,
         },
         $inc: { version: 1 }, // TODO: Remove all this version stuff
       });
@@ -54,7 +54,10 @@ function handleAddedAnnotation({
 
   Annotations.upsert(query.selector, query.modifier, (err) => {
     if (err) {
-      logger.error({ logCode: 'whiteboard_annotation_upsert_error' }, err);
+      logger.error({
+        logCode: 'whiteboard_annotation_upsert_error',
+        extraInfo: { error: err },
+      }, 'Error on adding an annotation');
       return;
     }
 
@@ -117,9 +120,9 @@ function increaseBrightness(realHex, percent) {
   const b = parseInt(hex.substr(4, 2), 16);
 
   /* eslint-disable no-bitwise, no-mixed-operators */
-  return parseInt(((0 | (1 << 8) + r + ((256 - r) * percent) / 100).toString(16)).substr(1) +
-     ((0 | (1 << 8) + g + ((256 - g) * percent) / 100).toString(16)).substr(1) +
-     ((0 | (1 << 8) + b + ((256 - b) * percent) / 100).toString(16)).substr(1), 16);
+  return parseInt(((0 | (1 << 8) + r + ((256 - r) * percent) / 100).toString(16)).substr(1)
+     + ((0 | (1 << 8) + g + ((256 - g) * percent) / 100).toString(16)).substr(1)
+     + ((0 | (1 << 8) + b + ((256 - b) * percent) / 100).toString(16)).substr(1), 16);
   /* eslint-enable no-bitwise, no-mixed-operators */
 }
 
@@ -144,11 +147,10 @@ const proccessAnnotationsQueue = async () => {
   const annotations = annotationsQueue.splice(0, queueSize);
 
   // console.log('annotationQueue.length', annotationsQueue, annotationsQueue.length);
-  await makeCall('sendBulkAnnotations', annotations.filter(({ id }) => !discardedList.includes(id)))
+  await makeCall('sendBulkAnnotations', annotations.filter(({ id }) => !discardedList.includes(id)));
 
   // ask tiago
-  const delayPerc =
-    Math.min(annotationsMaxDelayQueueSize, queueSize) / annotationsMaxDelayQueueSize;
+  const delayPerc = Math.min(annotationsMaxDelayQueueSize, queueSize) / annotationsMaxDelayQueueSize;
   const delayDelta = annotationsBufferTimeMax - annotationsBufferTimeMin;
   const delayTime = annotationsBufferTimeMin + (delayDelta * delayPerc);
   setTimeout(proccessAnnotationsQueue, delayTime);
diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
index 655fe1597b..ca29cdb410 100755
--- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
+++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
@@ -184,7 +184,13 @@ class AudioManager {
         clearTimeout(iceGatheringTimeout);
       }
 
-      logger.error({ logCode: 'audiomanager_listenonly_error' }, `Listen only error:${JSON.stringify(err)} on try ${retries}`);
+      logger.error({
+        logCode: 'audiomanager_listenonly_error',
+        extraInfo: {
+          error: err,
+          retries,
+        },
+      }, 'Listen only error');
       throw {
         type: 'MEDIA_ERROR',
         message: this.messages.error.MEDIA_ERROR,
@@ -331,7 +337,13 @@ class AudioManager {
         const errorKey = this.messages.error[error] || this.messages.error.GENERIC_ERROR;
         const errorMsg = this.intl.formatMessage(errorKey, { 0: bridgeError });
         this.error = !!error;
-        logger.error({ logCode: 'audio_failure', error, cause: bridgeError }, `Audio Error ${JSON.stringify(errorMsg)}`);
+        logger.error({
+          logCode: 'audio_failure',
+          extraInfo: {
+            error,
+            cause: bridgeError,
+          },
+        }, 'Audio Error');
         if (silenceNotifications !== true) {
           this.notify(errorMsg, true);
           this.exitAudio();
@@ -362,7 +374,10 @@ class AudioManager {
     audio.src = 'resources/sounds/silence.mp3';
 
     audio.play().catch((e) => {
-      logger.warn({ logCode: 'audiomanager_error_test_audio' }, 'Error on playing test audio:', e);
+      logger.warning({
+        logCode: 'audiomanager_error_test_audio',
+        extraInfo: { error: e },
+      }, 'Error on playing test audio');
     });
 
     return dest.stream;
diff --git a/bigbluebutton-html5/imports/ui/services/network-information/index.js b/bigbluebutton-html5/imports/ui/services/network-information/index.js
index c665bb5fc0..2c336ca953 100644
--- a/bigbluebutton-html5/imports/ui/services/network-information/index.js
+++ b/bigbluebutton-html5/imports/ui/services/network-information/index.js
@@ -150,7 +150,12 @@ export const startBandwidthMonitoring = () => {
 
     if (lastEffectiveConnectionType
       && lastEffectiveConnectionType.effectiveConnectionType !== effectiveType) {
-      logger.info({ logCode: 'user_connection_instability' }, `User ${Auth.userID} effective connection is now ${effectiveType}`);
+      logger.info({
+        logCode: 'user_connection_instability',
+        extraInfo: {
+          effectiveType,
+        },
+      }, `User ${Auth.userID} effective connection is now ${effectiveType}`);
       makeCall('setUserEffectiveConnectionType', effectiveType);
     }
   }, 5000);
-- 
GitLab