We’re going to implement a configurable logger. You’ll be able to add or remove logging options based on your current needs.

Here are a couple of requirements that are expected of our new logger:

  • It should return a closure that could be used as a middleware.
  • It should serve a single purpose - log all incoming requests to the console.
  • The format of the logs should be configurable by the config string passed accepted as a parameter

Configuration details:

  • The config string can include any of the substrings :date, :method or :url.
  • These are the config options which should be split by space, i.e. :date :method or :date :url
  • For each known option you should include extra information into the console.log
  • Date should be printed out as a result of the function getFormattedDate
  • method and url should be picked from the function object req
    You’ll start by exporting a function logger from the file middleware.js.
    As we want to make it configurable, it shouldn’t be just a plain middleware handler
    Instead, it should return one!

If you’re not really sure what I just said, then I suggest going over the lecture on Advanced Functions once again.
And if you just need a hint, then make sure that logger returns a function that can be used as a middleware and calls next() in the end of its execution

This task is part of the Full-Stack JavaScript Course .
If you have any issues with it, you can ask for community help below the post.
Feel free to help others if you’ve already solved the task.


export const getFormattedDate = (date) => {
  if (date) {
    return date.toUTCString();
  return new Date().toUTCString();


import { server } from './server.js';

const port = 8080;

server.listen(port, () => {
  console.log(`Server is running on ${port}`);


import express from 'express';

const server = express();

server.get('/', (req, res) => {
  res.send('Learning to use middleware!');

server.get('/about', (req, res) => {
  res.send(`I'm going to become a JS Developer in ${new Date().getFullYear()}!`);

export { server };