如何将Winston记录器对象传递给Loopback3中的共享模型

问题描述

我正在使用Loopback3,并尝试记录项目文件夹之外的共享模型的消息。 我的项目文件夹结构如下所示

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

此外,我在 myproj 文件夹(../../shared/models)之外的其他几个模型。以下是我的 server \ model-config.json

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

人员位于共享模型文件夹中。如何将记录器对象传递给它。

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'}
});

};

解决方法

当您的环回模型分布在多个目录甚至存储库中时,可能会有些混乱。从附加到回送实例对象的静态全局引用中管理记录器,验证,utils等常用部分始终是一个好习惯。此环回实例对象作为对其所有模型的引用。我解决这个问题的方法是...

  1. 在loopback3项目中添加新的启动脚本,并将logger类的实例附加到Loopback的app实例。
'use strict';

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

module.exports = function (app) {
  app.logger = logger;
};
  1. 现在,只要需要,您都可以从模型上的app参考中访问它。
Person.greet = async function(msg) {
 Person.app.logger.info("received message: " + msg);
 return 'Greetings... ' + msg;
}
,

我喜欢下面的

在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
  });
};

人员模型中

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;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...