Node.js记录

问题描述 投票:170回答:8

是否有任何库可以帮助我处理Node.Js应用程序中的日志记录?我想要做的就是,我想将所有日志写入文件,我还需要一些选项,比如在特定大小或日期后推出文件。


我已经整合了log4js,试图将所有配置细节保存在一个文件中,并仅使用其他应用程序文件中的方法以便于维护。但它没有按预期工作。这就是我想要做的

var log4js = require('log4js'); 
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');


var traceLogger = function (message) {
        logger.trace('message');
    };

var errorLogger = function (message) {
        logger.trace(message);
    };


exports.trace = traceLogger;
exports.error = errorLogger;

我已将此文件包含在其他文件中并尝试过

log.error ("Hello Error Message");

但它没有用。这有什么不对吗?

node.js logging libraries
8个回答
191
投票

Winston是一个非常好的日志库。您可以使用它将日志写入文件。

代码看起来像:

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/debug.log', json: false })
  ],
  exceptionHandlers: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

然后你可以使用它:

var logger = require('./log');

logger.info('log to file');

59
投票

Scribe.JS轻量级记录器

我查看了很多记录器,但我找不到轻量级的解决方案 - 所以我决定制作一个发布在github上的简单解决方案。

  • 保存按用户,日期和级别组织的文件
  • 给你一个漂亮的输出(我们都喜欢)
  • 易于使用的HTML界面

我希望这能够帮到你。

在线演示

http://bluejamesbond.github.io/Scribe.js/

安全的Web访问日志

向控制台打印漂亮的文本!

Web访问

Github上

https://github.com/bluejamesbond/Scribe.js


29
投票

Log4js是nodejs应用程序最流行的日志库之一。

它支持许多很酷的功能:

  1. 彩色控制台记录
  2. 替换节点的console.log函数(可选)
  3. 文件追加器,基于文件大小的日志滚动
  4. SMTP,GELF,hook.io,Loggly appender
  5. 多进程appender(当你有工作进程时很有用)
  6. 连接/快速服务器的记录器
  7. 可配置的日志消息布局/模式
  8. 不同日志类别的不同日志级别(使应用程序的某些部分日志为DEBUG,其他部分仅为ERRORS等)

例:

  1. 安装:npm install log4js
  2. 配置(./config/log4js.json): {"appenders": [ { "type": "console", "layout": { "type": "pattern", "pattern": "%m" }, "category": "app" },{ "category": "test-file-appender", "type": "file", "filename": "log_file.log", "maxLogSize": 10240, "backups": 3, "layout": { "type": "pattern", "pattern": "%d{dd/MM hh:mm} %-5p %m" } } ], "replaceConsole": true }
  3. 用法: var log4js = require( "log4js" ); log4js.configure( "./config/log4js.json" ); var logger = log4js.getLogger( "test-file-appender" ); // log4js.getLogger("app") will return logger that prints log to the console logger.debug("Hello log4js");// store log in file

11
投票

你也可以在https://npmjs.org/doc/coding-style.html推荐的issacs中使用npmlog。

你可以在这里找到这个模块https://github.com/isaacs/npmlog


6
投票

“logger.setLevel('ERROR');”造成了这个问题。我不明白为什么,但当我将它设置为“ALL”以外的任何内容时,文件中不会打印任何内容。我捅了一下并修改了你的代码。它对我来说很好。我创建了两个文件。

logger.js

var log4js = require('log4js');
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');

var getLogger = function() {
   return logger;
};

exports.logger = getLogger();

logger.test.js

var logger = require('./logger.js')

var log = logger.logger;

log.error("ERROR message");
log.trace("TRACE message");

当我运行“node logger.test.js”时,我在test.log文件中只看到“ERROR message”。如果我将级别更改为“TRACE”,则两行都打印在test.log上。


3
投票

Winston是大多数开发人员的强大选择。我一直在使用温斯顿。最近我使用了带有papertrail的winston,它将应用程序记录到了下一级。

这是他们网站的一个很好的截图。

enter image description here

它有用吗?

  • 您可以在一个地方管理来自不同系统的日志。当你有两个后端通信时,这可能非常有用,并且可以在现场看到两个后端的日志。
  • 日志是实时的。您可以看到生产服务器的实时日志。
  • 强大的搜索和过滤功能
  • 您可以创建警报,以便在遇到日志中的特定文本时向您发送电子邮件。

你可以找到更多http://help.papertrailapp.com/kb/how-it-works/event-viewer/

使用winstonwinston-expresswinston-papertrail节点模块的简单配置。

import winston from 'winston';
import expressWinston from 'express-winston';
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
// create winston transport for Papertrail
var winstonPapertrail = new winston.transports.Papertrail({
  host: 'logsX.papertrailapp.com',
  port: XXXXX
});
app.use(expressWinston.logger({
  transports: [winstonPapertrail],
  meta: true, // optional: control whether you want to log the meta data about the request (default to true)
  msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
  expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true
  colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
  ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
}));

我希望这可以帮助别人管理他们的日志!!


2
投票

'nodejslogger'模块可用于简单日志记录。它有三个级别的日志记录(INFO,ERROR,DEBUG)

var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})

D:调试,I:信息,E:错误

logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")

该模块可在以下网址访问:https://www.npmjs.com/package/nodejslogger


0
投票

注意到errorLogger是logger.trace的包装器。但是记录器的级别是ERROR,因此logger.trace不会将其消息记录到logger的appender。

修复是将logger.trace更改为errorLogger主体中的logger.error。

© www.soinside.com 2019 - 2024. All rights reserved.