我正在使用Sails中的Winston构建自定义记录器。我想在所有各种环境配置中设置一个日志级别变量,并在log.js
文件中引用该变量。这在我的控制器中似乎可以通过引用sails.config.variableName
起作用,但是在log.js
中使用相同的引用会抛出:Details:ReferenceError: sails is not defined
有人可以告诉我如何从配置中引用此变量吗?我可以添加某种require语句吗?
我宁愿不使用某种开关/条件来设置级别,该开关/条件引用了log.js
中用于启动应用程序的env变量(即process.env.myEnvironment
)
答案 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 并循环您的容器,而无需重新部署您的代码。然后您以相同的方式将其切换回来,无需任何停机时间。