0

I have quite confusing issue in my plate, I have a server.js which is my first app entry point:

const test = require('./routers/test')

const express= require("express")

const pino = require('pino');
const expressPino = require('express-pino-logger');

const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
const expressLogger = expressPino({ logger });
const app= express();
const port= process.env.port || 4000
app.use(expressLogger);



app.use(express.json());
app.use(test);
app.listen(port, ()=>{
    logger.info(`Listening to port ${port}`);
});

As you see I have a logger(pino) and I use it and it works fine. Now I need to add a routes file to this entry point server file and the problem is exactly here. How can I pass down or use the logger I created in server.js in test.js route file(looking for best practices)?

const express = require('express');
const router = new express.Router();

router.get('test', (req, res)=>{
  console.log("THIS CONSOLE.LOG NEEDS TO BE REPLACED WITH LOGGER.INFO");  
  res.send(udsData.getDummyUrlResponse())
});

module.exports = router
Learner
  • 1,686
  • 4
  • 19
  • 38

1 Answers1

3

It's better to extract the logger to a separate module, e.x. logger/index.js and then import it wherever you need.

./logger/index.js

const pino = require('pino');
const expressPino = require('express-pino-logger');

const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
const expressLogger = expressPino({ logger });

module.exports = { logger, expressLogger };

server.js

const { logger, expressLogger } = require('./logger');

app.use(expressLogger);
...
app.listen(port, ()=>{
    logger.info(`Listening to port ${port}`);
});

test.js

const { logger } = require('./logger');
Sebastian Kaczmarek
  • 8,120
  • 4
  • 20
  • 38
  • How about this part: const expressLogger = expressPino({ logger }); app.use(expressLogger); if I separate it how can I add it to app.use? will it work without adding it? – Learner Nov 12 '19 at 14:36
  • Sorry, missed that part. Updated the answer – Sebastian Kaczmarek Nov 12 '19 at 14:39
  • Thanks a lot and just out of curiosity if logger works already then what is the point of adding this at all: app.use(expressLogger);. I found the above code in a tutorial and wondering what is the role of that line? – Learner Nov 12 '19 at 14:43
  • It extends `express` functionality with additional logging features, like `request.log.info()` which is not available without it. Check out the docs: https://www.npmjs.com/package/express-pino-logger – Sebastian Kaczmarek Nov 12 '19 at 14:47