Sails对象在log.js中不可用

时间:2018-09-26 19:01:41

标签: javascript node.js environment-variables sails.js

我正在使用Sails中的Winston构建自定义记录器。我想在所有各种环境配置中设置一个日志级别变量,并在log.js文件中引用该变量。这在我的控制器中似乎可以通过引用sails.config.variableName起作用,但是在log.js中使用相同的引用会抛出:Details:ReferenceError: sails is not defined有人可以告诉我如何从配置中引用此变量吗?我可以添加某种require语句吗?

我宁愿使用某种开关/条件来设置级别,该开关/条件引用了log.js中用于启动应用程序的env变量(即process.env.myEnvironment

1 个答案:

答案 0 :(得分:0)

处理这个问题的最好方法,即使你可能不喜欢它,是在启动时将它作为环境变量传递给 Sails,而不是使用 env/{name}.js 文件。 log.js 在完整的 Sails 对象之前加载,您无法引用它。我建议使用:

process.env.{your variable name}
ex: process.env.LOG_LEVEL 

在启动时将 logLevel 传递给sails.js 应用程序的位置:

>> LOG_LEVEL=info NODE_ENV=dev node app.js

在这种情况下,您可以在 log.js 文件中使用 LOG_LEVEL 和 NODE_ENV。

但这不是一个“开关”,而是一个特定于环境的设置。外部化环境特定实体实际上是一种常见做法,建议用于云环境,您可以在无需重新部署代码的情况下更改值。

在容器中运行时,您可以轻松地将日志级别从 DEBUG 更改为 INFO 并循环您的容​​器,而无需重新部署您的代码。然后您以相同的方式将其切换回来,无需任何停机时间。