Node.js记录


177

是否有任何库可以帮助我处理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");

但这是行不通的。这有什么问题吗?


1
log4js似乎还可以。您已将错误级别设置为错误。它应该是:logger.setLevel(log4js.levels.ERROR);
Boklucius 2014年

Answers:


196

温斯顿是一个相当不错的日志记录库。您可以使用它将注销写到文件中。

代码如下所示:

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');

5
@TravisWebb-github.com/ flatiron / winston
ostergaard

3
我已经使用Winston很长时间了。它变得有问题,我放弃了它,转而使用npmlog。
airportyh

8
@everyone,似乎温斯顿再次得到了维护…… github.com
flatiron/

简要说明一下:在上述示例中,调用logger.cli()获得彩色命令行输出。
邓肯

1
Winston不允许定义其配置并从.json文件读取。糟糕的设计,imo。
miniml

59

Scribe.JS轻型记录仪

我浏览了许多记录器,但找不到一个轻量级的解决方案-因此,我决定制作一个发布在github上的简单解决方案。

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

我希望这能够帮到你。

在线演示

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

对日志的安全Web访问

一个

太漂亮的文本打印到控制台!

一个

网络访问

一个

Github

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



30

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

它支持许多很酷的功能:

  1. 彩色控制台记录
  2. 替换节点的console.log函数(可选)
  3. 文件附加器,根据文件大小滚动日志
  4. SMTP,GELF,hook.io,Loggly附加程序
  5. 多进程附加程序(在拥有辅助进程时很有用)
  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


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上。


2
logging.apache.org/log4j/1.2/manual.html记录器可以分配级别。一组可能的级别,即:TRACE,DEBUG,INFO,WARN,ERROR和FATAL如果日志记录请求的级别高于或等于其记录器的级别,则认为该记录请求已启用。否则,该请求被称为禁用。
肖恩

3

对于大多数开发人员来说,温斯顿是一个不错的选择。我已经使用Winston很久了。最近,我将winston与papertrail结合使用,这使应用程序日志记录更上一层楼。

这是他们网站上的漂亮截图。

在此处输入图片说明

它如何有用

  • 您可以在一处管理来自不同系统的日志。当您有两个后端通信并且可以同时查看两个日志时,此功能非常有用。

  • 日志是实时的。您可以查看生产服务器的实时日志。

  • 强大的搜索和过滤器

  • 您可以创建警报,以便在日志中遇到特定文本时向您发送电子邮件。

您可以找到更多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
}));

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


1
这仍然有效,但是将winston升级到v3之后,您会收到警告:“ Papertrail是传统的winston传输。请考虑升级”。当前未完成的运输已有升级。
Jim Jimson

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。但是logger的级别为ERROR,因此logger.trace不会将其消息记录logger的附加程序中。

解决方法是改变logger.tracelogger.error在体内errorLogger

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.