0

I'm using Loopback3 and trying to log message for shared model that are outside of project folder. My project folder structure looks like below

myproj\server\logger.js   // using winston logger here
myProj\common\models\     // I've couple of models here and able to use above logger

Also, I've few more models outside myproj folder (../../shared/models). Below is my server\model-config.json

"sources": [
  "loopback/common/models",
  "loopback/server/models",
  "../common/models",
  "../../shared/models",  // Shared models
  "./models"
],

And Person is in shared models folder. How can i pass logger object to this.

module.exports = function(Person){

Person.greet = async function(msg) {
    logger.info("received message: " + msg);  // How to get here above winston logger object ?
    console.log("received message: " + msg);
    return 'Greetings... ' + msg;
}

Person.remoteMethod('greet', {
      accepts: {arg: 'msg', type: 'string'},
      returns: {arg: 'greeting', type: 'string'}
});

};

Prasad Kanaparthi
  • 6,423
  • 4
  • 35
  • 62

2 Answers2

1

It can be somewhat messy when you have your loopback models spread across multiple directories or even repositories. Its always a good practice to console common parts like logger, validation, utils etc from a static global reference, attached to loopback instance object. This loopback instance object is present as a reference to all its models. The way I would solve this problem is...

  1. Add a new boot script in your loopback3 project and attach instance of logger class to loopback's app instance.
'use strict';

const { logger } = require("./logger");

module.exports = function (app) {
  app.logger = logger;
};
  1. Now wherever needed, you can simply access it from the app reference present on the model.
Person.greet = async function(msg) {
 Person.app.logger.info("received message: " + msg);
 return 'Greetings... ' + msg;
}
Ketan Patil
  • 1,222
  • 13
  • 21
0

I did like below

in server\server.js

const {logger} = require("./logger");

app.start = function() {
return app.listen(function() {
    app.emit('started');
    :
    :
    app.models.Person.logger = logger;   // Adding new property to Person model
  });
};

in Person model

Person.greet = async function(msg) {
 Person.logger.info("received message: " + msg); // using logger object like this
 this.logger.info("received message: " + msg);   // or like this      
 console.log("received message: " + msg);
 return 'Greetings... ' + msg;
}
Prasad Kanaparthi
  • 6,423
  • 4
  • 35
  • 62