Structured logging with JSON helps you keep logs neat and easy to read by machines and people. It makes finding problems faster and sharing logs simpler.
Structured logging with JSON in Express
console.log(JSON.stringify({ key1: 'value1', key2: 'value2' }))Use JSON.stringify() to convert an object into a JSON string for logging.
Include keys that describe the event, like level, message, and timestamp.
console.log(JSON.stringify({ level: 'info', message: 'Server started' }))console.log(JSON.stringify({ level: 'error', message: 'Failed to connect', errorCode: 500 }))console.log(JSON.stringify({ level: 'debug', message: 'User login', userId: 123, time: new Date().toISOString() }))This Express app logs every incoming request as a JSON string with details like method, URL, and time. It also logs when the server starts.
const express = require('express'); const app = express(); app.use((req, res, next) => { const logEntry = { level: 'info', message: 'Request received', method: req.method, url: req.url, timestamp: new Date().toISOString() }; console.log(JSON.stringify(logEntry)); next(); }); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log(JSON.stringify({ level: 'info', message: 'Server listening on port 3000', timestamp: new Date().toISOString() })); });
Make sure to include timestamps to know when events happen.
Use consistent keys in your JSON logs for easier searching and filtering.
Consider using logging libraries like winston or pino for more features.
Structured logging uses JSON to keep logs clear and organized.
It helps machines and people understand logs quickly.
Include useful info like level, message, and timestamp in every log.
Practice
Solution
Step 1: Understand structured logging purpose
Structured logging formats logs in a clear, consistent way using JSON.Step 2: Identify benefits of JSON logs
JSON logs are easy for both humans and machines to read and analyze quickly.Final Answer:
It makes logs easy to read and parse by both humans and machines. -> Option AQuick Check:
Structured logging = clear, readable logs [OK]
- Confusing structured logging with hiding logs
- Assuming it fixes code bugs automatically
- Thinking it slows server for security
Solution
Step 1: Check JSON object syntax in JavaScript
JSON objects in JS use curly braces with key-value pairs, keys as strings or identifiers, values as strings or variables.Step 2: Identify correct console.log usage
console.log accepts an object directly to print it as JSON-like output, so console.log({ level: 'info', message: 'Server started' }); is correct.Final Answer:
console.log({ level: 'info', message: 'Server started' }); -> Option BQuick Check:
Use object syntax inside console.log [OK]
- Passing JSON as a string instead of object
- Using incorrect syntax with equals inside console.log
- Logging plain strings without JSON structure
const log = (level, message) => {
console.log(JSON.stringify({ level, message, timestamp: new Date().toISOString() }));
};
log('error', 'Failed to connect');What will be the output format?
Solution
Step 1: Understand JSON.stringify output
JSON.stringify converts the object into a JSON string with keys and values in double quotes.Step 2: Analyze the log function output
The log function prints a JSON string with keys level, message, and timestamp in ISO format.Final Answer:
{"level":"error","message":"Failed to connect","timestamp":"2024-06-01T12:00:00.000Z"} -> Option DQuick Check:
JSON.stringify outputs JSON string [OK]
- Expecting plain text instead of JSON string
- Confusing JSON string with object literal
- Ignoring timestamp format
console.log(JSON.stringify(level: 'info', message: 'Started'));
What is the error and how to fix it?
Solution
Step 1: Identify JSON.stringify argument syntax
JSON.stringify expects a single object or value; here, the argument uses invalid syntax without braces.Step 2: Correct the argument to an object
Wrap the key-value pairs inside curly braces to form a valid object: { level: 'info', message: 'Started' }.Final Answer:
SyntaxError due to incorrect JSON.stringify argument; fix by passing an object inside curly braces. -> Option CQuick Check:
JSON.stringify needs an object argument [OK]
- Passing key-value pairs without braces
- Assuming JSON.stringify accepts multiple arguments
- Ignoring syntax errors in object literals
Solution
Step 1: Check correct JSON object syntax inside JSON.stringify
app.use((req, res, next) => { console.log(JSON.stringify({ level: 'info', message: 'Request received', timestamp: new Date().toISOString(), requestId: req.id })); next(); }); correctly passes an object with keys and values inside curly braces to JSON.stringify.Step 2: Verify inclusion of all required fields and middleware usage
app.use((req, res, next) => { console.log(JSON.stringify({ level: 'info', message: 'Request received', timestamp: new Date().toISOString(), requestId: req.id })); next(); }); includes level, message, timestamp (ISO string), and requestId from req.id, then calls next() properly.Final Answer:
app.use((req, res, next) => { console.log(JSON.stringify({ level: 'info', message: 'Request received', timestamp: new Date().toISOString(), requestId: req.id })); next(); }); -> Option AQuick Check:
Middleware logs JSON object with all fields [OK]
- Passing invalid syntax to JSON.stringify
- Logging plain strings instead of JSON
- Forgetting to call next() in middleware
Ready to prove it?
Pass the test and this pattern moves unknown
