DEV Community

Giulia Chiola
Giulia Chiola

Posted on β€’ Originally published at giuliachiola.dev

Show console outputs based on environment

A project can be beautiful from the outside, but if the browser console is full of messy outputs it will immediately seem confusing and carelessly πŸ˜…

Using the local storange + custom script

In this script we:

  • assign the window.console to a custom variable named consoleWrap
  • create a "state" variable devMode and save it in the browser local storage. We will use it to determinate if we are in development or production mode!
  • instead of use the default console.log() function, use the new consoleWrap.debug.log() instead, as it will be shown in browser console only when devMode local storage var is 'true'.
// main.js

let consoleWrap = {};

if (localStorage.devMode && localStorage.devMode === 'true') {
  consoleWrap.debug = window.console
} else {
  consoleWrap.debug = () => {}
}
Enter fullscreen mode Exit fullscreen mode
// other-file.js

consoleWrap.debug.log('Hello!')
Enter fullscreen mode Exit fullscreen mode

To set the devMode in browser local storage, please add this line in browser console:

// browser console

localStorage.devMode = 'true'

> Hello!
Enter fullscreen mode Exit fullscreen mode

🧨 !important

local storage values are strings 🀭, so we have to assign the variable as string localStorage.devMode = 'true' and check its value as string localStorage.devMode === 'true'.

Using vue env + webpack + loglevel

In a Vue project we already have webpack installed, and do not output noisy console.log() in production JS bundle is an efficient way to save kilobytes! 😏

Loglevel to the rescue!

Minimal lightweight simple logging for JavaScript. loglevel replaces console.log() and friends with level-based logging and filtering, with none of console's downsides.

Install it in development packages:

npm install loglevel --save-dev
Enter fullscreen mode Exit fullscreen mode

In every JS file we would need to output something, we have to:

  • import loglevel
  • use its syntax, where log.debug == console.log
import log from 'loglevel';

log.debug('This output will be in both development and production mode')
Enter fullscreen mode Exit fullscreen mode

Why did we talk about webpack above? πŸ˜…

Well, webpack will not add into the JS bundle the code that will never be executed, as for example a condition that will never match:

if ((2 + 2) === 5) {
  // This code will never see the sunlight! 😒
}
Enter fullscreen mode Exit fullscreen mode

so if we use node ENV variables settings:

# .env

VUE_APP_DEBUG=true
Enter fullscreen mode Exit fullscreen mode
# .env.production

VUE_APP_DEBUG=false
Enter fullscreen mode Exit fullscreen mode

we can add all console outputs we want to our project

import log from 'loglevel';

if (process.env.VUE_APP_DEBUG) {
  log.debug('This output will be in development mode, but not in production mode')
}
Enter fullscreen mode Exit fullscreen mode

and none of them will output in the final JS bundle! πŸŽ‰

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay