当前位置: 首页 > 面试题库 >

如何在多个模块中使用Winston?

徐鸿文
2023-03-14
问题内容

我有几个模块-假设是server.js,module1.js,…,moduleN.js。

我想在server.js中定义日志文件:

winston.add(winston.transports.File, { filename: 'mylogfile.log' });

然后在我所有的模块中使用它

最好的方法是什么?我可以exports.winston=winston;在每个模块中,然后在server.js中进行设置,但是还有更好的解决方案吗?

先感谢您!


问题答案:

默认的记录器概念很好地解决了这一问题。

Winston定义了一个默认记录器,任何对Winston的直接要求(及其后要求)都将检索该记录器。因此,您只需配置一次此默认记录器,即可通过其出色的调整后的多传输模式中的vanilla
require(’winston’)进行后续模块使用。

例如,这是我定义3种传输方式的完整日志记录设置。我有时将Loggly换成MongoDB。

server.js

var logger=require('./log.js'); 
// requires winston and configures transports for winstons default logger- see code below.

所有其他.js文件

var logger=require('winston'); // this retrieves default logger which was configured in log.js
logger.info("the default logger with my tricked out transports is rockin this module");

log.js-这是DEFAULT记录器的一次性配置

var logger = require('winston');
var Loggly = require('winston-loggly').Loggly;
var loggly_options={ subdomain: "mysubdomain", inputToken: "efake000-000d-000e-a000-xfakee000a00" }
logger.add(Loggly, loggly_options);
logger.add(winston.transports.File, { filename: "../logs/production.log" });
logger.info('Chill Winston, the logs are being captured 3 ways- console, file, and Loggly');
module.exports=logger;

另外,对于更复杂的情况,您可以使用Winston容器并从其他模块中的命名容器中检索记录器。我没有用过

我唯一的问题是部署主机上缺少日志目录,该目录很容易修复。

希望这可以帮助。



 类似资料:
  • 问题内容: 从Python 2.7的howto(我的重点): 命名记录器时,一个好的习惯是在每个使用日志记录的模块中使用模块级记录器,命名如下: 这意味着记录器名称跟踪包/模块的层次结构 ,并且从记录器名称中记录事件的地方就很明显了。 听起来像个好建议。 现在,本手册为多个模块提供了一个示例,该示例使用硬编码的记录器名称而不是常量。在示例的“主模块”中,我们发现 在“辅助模块”中 我将此示例逐字复

  • 问题内容: 我已使用以下命令“ go mod init database”在“数据库”文件夹中的“ GOPATH”之外创建了个人使用的模块库,但我不知道: 如何在其他模块中使用/ 导入 该模块? 操作系统: Windows 7 ,Go: v1.11 问题答案: 最简单,可行的现成解决方案是将您的包/模块放入VCS(例如github.com),因此其他包(在其他模块内部)可以通过导入来简单地引用它:

  • 我的代码结构如下: 事件 消息 其他代码 功能测试 在jacoco的构建脚本中,首先它必须复制所有类并使用该类目录来运行该工具。您能描述一下在这里编写目标目录的步骤吗。我的意思是,我应该如何提及运行代码覆盖的目录。 构建时,每个文件夹都有自己的目标文件夹,其中包含类。 以下是步骤: 在詹金斯将项目作为工作进行构建 将其部署到用户阶段 在詹金斯中运行雅各布报告作业 雅高报告工作说明: > 构建步骤-

  • 在我的Android应用程序项目中,我试图避免在我的项目中引用一个外部Maven库,否则我会从那里加载多个。组成一个SDK的aar工件。 相反,我想将 .aar 文件放入我的项目中,然后从我的一个 Gradle Android 库模块中引用它们。 我已经尝试了不同的方法——但都不管用。 灵感来自 https://stackoverflow.com/a/72672032/35689 在这里,我的工件

  • 我有一个小的python项目,它有如下结构-- 我计划使用默认日志模块将消息打印到stdout和一个日志文件。要使用日志模块,需要进行一些初始化- 目前,我在开始记录消息之前在每个模块中执行此初始化。是否有可能在一个地方只执行一次初始化,以便通过在整个项目中进行日志记录来重用相同的设置?

  • 问题内容: 我有一个具有以下结构的小型python项目- 我计划使用默认的日志记录模块将消息打印到stdout和日志文件。要使用日志记录模块,需要进行一些初始化- 目前,在开始记录消息之前,我会在每个模块中执行此初始化。是否可以只在一个位置执行一次初始化,以便通过在整个项目中记录日志来重复使用相同的设置? 问题答案: 最佳实践是在每个模块中都定义一个记录器,如下所示: 在模块顶部附近,然后在模块中