Tag: winston

温斯顿的日志stream如何工作?

Winston文档有一个关于stream式日志的部分,它说: stream式传输允许您从您select的传输中将日志stream式传回。 并给出以下代码示例: // // Start at the end. // winston.stream({ start: -1 }).on('log', function(log) { console.log(log); }); 我读到这一点是,每个新的日志消息添加将被输出到控制台。 {start: -1}configuration指示stream在文件结尾处开始,因此只有新的日志条目被输出。 我期望下面的Node脚本会导致test.log文件的每一行都输出到控制台,然后每隔500ms输出一个新的对象。 var winston = require('winston'); winston.add(winston.transports.File, { filename: 'test.log' }); winston.remove(winston.transports.Console); winston.stream().on('log', function(log) { console.log(log); }); setInterval(function(){ winston.log('info', 'help'); }, 500); 我希望看到像下面的输出: {"level":"info","message":"help","timestamp":"2013-12-10T05:55:15.806Z"} {"level":"info","message":"help","timestamp":"2013-12-10T05:55:16.307Z"} {"level":"info","message":"help","timestamp":"2013-12-10T05:55:16.809Z"} {"level":"info","message":"help","timestamp":"2013-12-10T05:55:17.309Z"} {"level":"info","message":"help","timestamp":"2013-12-10T05:56:48.316Z"} 实际上发生的事情是,日志工作与File传输一样(该文件每500毫秒获取一个新的日志条目),但没有输出到控制台。 console.log(log)行永远不会被调用。 我错过了一些明显的东西,或者误解了Winston的日志stream的目的?

找不到模块'winston'

我写了一个使用winston来logging东西的小模块。 我用sudo npm install -g winston (这是在vm上…所以我不太关心sudo等等 从npmlogging: winston@0.7.2 /usr/local/lib/node_modules/winston ├── cycle@1.0.2 ├── stack-trace@0.0.7 ├── eyes@0.1.8 ├── colors@0.6.2 ├── async@0.2.9 ├── pkginfo@0.3.0 └── request@2.16.6 (forever-agent@0.2.0, aws-sign@0.2.0, tunnel-agent@0.2.0, oauth-sign@0.2.0, json-stringify-safe@3.0.0, cookie-jar@0.2.0, node-uuid@1.4.1, mime@1.2.11, qs@0.5.6, hawk@0.10.2, form-data@0.0.10) 当我尝试在节点中运行我的模块时,我得到: Error: Cannot find module 'winston' at Function.Module._resolveFilename (module.js:331:15) at Function.Module._load (module.js:273:25) at Module.require (module.js:357:17) at require (module.js:373:17) at Object.<anonymous> […]

除了第一天以外,如何每天使用Winston旋转日志

我需要每天轮换日志,除了当天的文件。 我正在使用winston和winston-daily-rotate-file库。 在下面的例子中,我第一次执行节点时会生成一个文件“info.log.2016-08-09”。 但是,我真的需要生成文件“info.log”,在这一天之后,应该重命名为“info.log.2016-08-09”,并为当天创build一个新的“info.log”。 我明白,这是其他应用程序的正常行为。 var logger = new (winston.Logger)({ transports: [ new dailyRotateFile( { name: 'cronInfo', filename: path.join(__dirname,"log", "info.log"), level: 'info', timestamp: function(){ return utils.formatDate(new Date(), "yyyy-mm-dd'T'HH:MM:ss.l'Z'") }, formatter: function(options) { return options.timestamp() +' ['+ options.level.toUpperCase() +'] '+ (undefined !== options.message ? options.message : '') + (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' […]

NodeJS Express – 全球唯一的请求ID

是否可以定义每个日志语句中包含的唯一请求标识,而无需将logging器交给每个方法/函数调用? 使用中的技术:NodeJS,Express,Winston

温斯顿:了解伐木水平

我和Winston读了一遍,弄不明白为什么日志级别是按照它们的顺序排列的,以及为什么这些传输方式的行为方式(至less在控制台方面)。 我很感激,如果有人可以甚至彻底地用真实的用例来解释为什么用Winston进行日志logging是这样工作的? 例如,我设置我的logging器是这样的: var logger = new (winston.Logger)({ levels: winston.config.syslog.levels, colors: winston.config.syslog.colors, level: "debug", // I'm not sure what this option even does here??? transports: [ new (winston.transports.Console)({ colorize: true, handleExceptions: true, json: false, level: "debug" }) ] }); 所以,如果我做logger.debug("Test"); ,那么它会loggingdebug: Test ,罚款。 但是,如果我做logger.info("Test"); ,那么没有任何反应。 我的问题是,如果我想logging到控制台, 但除了 debug消息,我该怎么办? …甚至debug 和 info消息,但logging一切吗? 来自Java世界,使用标准的logging器,我习惯于使debug比warn更“精细”,logging器反向工作; 例如,将日志logging级别设置为info ,确实logging了所有内容但debug (或其他)。 […]

合并重新出现的错误中的堆栈跟踪

我在这里重新抛出Sequelize承诺(蓝鸟)的错误。 首先,这是为了改变错误信息,但是当它出现时,这也产生了更多信息的堆栈跟踪。 这是类似的 sequelize.sync().catch(originalError => { const rethrownError = new Error(originalError.msg + ': ' + originalError.sql); throw rethrownError; }); 其中originalError.stack不包含导致错误的行,但是它包含重要的信息,它来源于Sequelize和MySQL驱动程序: SequelizeDatabaseError: ER_KEY_COLUMN_DOES_NOT_EXITS: Key column 'NonExisting' doesn't exist in table at Query.formatError (…\node_modules\sequelize\lib\dialects\mysql\query.js:175:14) at Query._callback (…\node_modules\sequelize\lib\dialects\mysql\query.js:49:21) at Query.Sequence.end (…\node_modules\mysql\lib\protocol\sequences\Sequence.js:85:24) at Query.ErrorPacket (…\node_modules\mysql\lib\protocol\sequences\Query.js:94:8) at Protocol._parsePacket (…\node_modules\mysql\lib\protocol\Protocol.js:280:23) at Parser.write (…\node_modules\mysql\lib\protocol\Parser.js:74:12) at Protocol.write (…\node_modules\mysql\lib\protocol\Protocol.js:39:16) at Socket.<anonymous> (…\node_modules\mysql\lib\Connection.js:109:28) at emitOne […]

如何刷新温斯顿日志?

我想在 process.exit 之前刷新winstonlogging器。 process.on('uncaughtException', function(err){ logger.error('Fatal uncaught exception crashed cluster', err); logger.flush(function(){ // <- process.exit(1); }); }); 有没有什么像logger.flush可用? 我找不到任何关于它的事情,除了抱怨温斯顿没有被非常积极地维护的人之外。 作为替代scheme,是否有任何stream行的(主动维护的)多传输日志框架提供了冲洗function?

如何通过WinstonloginSocket.io?

我想使用Winston作为Socket.io的logging器。 我看到这个问题 ,它说: var io = require('socket.io').listen(8080); io.set('logger', { debug: <log function>, info: … , error: .., warn: .. }) 不幸的是,它没有描述log function应该是什么样子。 有些玩耍,看了一下Socket.iologging器的文档告诉我,没有固定的参数集:有一个,两个和三个参数的日志消息。 也许还有更多,我不知道。 我认为这肯定不是一个好的做法,有一个未定义数量的参数,特别是如果这是您的外部组件的接口。 无论如何…有没有人有这方面的经验? 任何人都可以指出要注意什么?

我怎样才能改变Winston的日志格式?

在我的节点应用程序中,我使用winston模块来存储我的应用程序日志。 我们可以将日志以两种格式存储,一种是json,另一种是string。 在winston中将string保存为string时,我正在获取日志格式。 2013-09-10T06:51:34.199Z – error: error message!!! (timestamp) – (level) : (log message) 现在我想将上面的日志格式更改为以下内容: 2013-09-10T06:51:34.199Z/error/error message!!! (timestamp) / (level) / (log message) 这怎么能实现? 我的代码 : var winston = require('winston'); winston.loggers.add('category1', { file: { filename: '/path/to/some/file',json:false } }); var category1 = winston.loggers.get('category1'); category1.log('error','error message!!!');

Winston的多个日志文件?

我们想用Winston来loggingNode.js. 但是,我们无法弄清楚如何拥有两个日志文件:一个用于错误,另一个用于其他所有文件。 但是,这样做的方式并不起作用:添加多个winston.transports.File传输给出错误。 其他人已经遇到了这个问题,含糊其辞的解决scheme,但没有真正的答案 。 有任何想法吗?