Logger Tagged Template Literal
In his GitHub book You Don’t Know JS Kyle Simpson talks about tagged template literals. In Front End Master course he also gives an example of a useful console logger tagged template literal shown below:
// consoleLogger.js
module.exports = function (strings, ...values) {
var str = ""
for (let i = 0; i < strings.length; i++ ) {
if (i > 0) {
if (values[i-1] && typeof values[i-1] == "object") {
if (values[i-1] instanceof Error) {
if (values[i-1].stack) {
str += values[i-1].stack
continue
}
} else {
try {
str += JSON.stringify(values[i-1])
continue
} catch (err) {}
}
}
str += values[i-1]
}
str += strings[i]
}
console.log(str)
return str
}
Here is how to use the function above:
// consoleLoggerUsage.js
const consoleLogger = require("./consoleLogger")
var v = 42
var o = { a: 1, b: [2, 3, 4] }
consoleLogger `This is my value ${v} and another ${o}`
try {
nothing()
} catch (error) {
consoleLogger `Caught ${error}`
}
Here’s the output:
$ node consoleLoggerUsage.js
This is my value 42 and another {"a":1,"b":[2,3,4]}
Caught ReferenceError: nothing is not defined
at Object.<anonymous> (C:\Projects\javascript\node-sandbox\consoleLoggerUsage.js:9:5)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47