183

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

但它不起作用。这有什么问题吗?

4

10 回答 10

201

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');
于 2012-08-18T15:40:22.720 回答
60

Scribe.JS 轻量级记录器

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

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

我希望这能够帮到你。

在线演示

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

安全的 Web 访问日志

一种

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

一种

网络访问

一种

Github

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

于 2014-01-23T23:40:09.027 回答
31

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

它支持许多很酷的功能:

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

例子:

  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
    
于 2014-04-30T04:33:13.643 回答
11

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

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

于 2013-10-15T10:30:53.070 回答
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 文件中只看到“错误消息”。如果我将级别更改为“TRACE”,那么这两行都会打印在 test.log 上。

于 2013-11-05T23:44:16.287 回答
3

Winston 是大多数开发人员的最佳选择。我一直在使用温斯顿。最近我将winston 与papertrail 一起使用,它将应用程序日志记录提升到一个新的水平。

这是他们网站的一个不错的屏幕截图。

在此处输入图像描述

它如何有用

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

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

  • 强大的搜索和过滤

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

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

使用winston,winston-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
}));
于 2017-02-11T10:14:33.660 回答
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

于 2015-11-27T17:44:47.163 回答
0

注意errorLogger是 logger.trace 的包装。但是 logger 的级别是ERROR所以logger.trace不会将其消息记录到logger的附加程序。

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

于 2015-08-21T14:14:25.933 回答
0

每个答案都是 5 6 岁,所以有点过时或贬值。2020年再说吧。

simple-node-logger是用于控制台、文件和滚动文件附加程序的简单多级记录器。特点包括:

  1. 级别:跟踪、调试、信息、警告、错误和致命级别(加上全部和关闭)

  2. 灵活的附加程序/格式化程序,默认为 HH:mm:ss.SSS LEVEL 消息添加附加程序以将输出发送到控制台、文件、滚动文件等

  3. 即时更改日志级别

  4. 域和类别列

  5. 基本附加程序中可覆盖的格式方法

  6. 跟踪所有日志语句计数的统计信息,包括警告、错误等

您可以在任何 nodejs Web 应用程序中轻松使用它:

   // create a stdout console logger
  const log = require('simple-node-logger').createSimpleLogger();

或者

  // create a stdout and file logger
  const log = require('simple-node-logger').createSimpleLogger('project.log');

或者

  // create a custom timestamp format for log statements
  const SimpleNodeLogger = require('simple-node-logger'),
  opts = {
      logFilePath:'mylogfile.log',
      timestampFormat:'YYYY-MM-DD HH:mm:ss.SSS'
   },
  log = SimpleNodeLogger.createSimpleLogger( opts );

或者

  // create a file only file logger
  const log = require('simple-node-logger').createSimpleFileLogger('project.log');

或者

  // create a rolling file logger based on date/time that fires process events
  const opts = {
      errorEventName:'error',
       logDirectory:'/mylogfiles', // NOTE: folder must exist and be writable...
        fileNamePattern:'roll-<DATE>.log',
         dateFormat:'YYYY.MM.DD'
  };
  const log = require('simple-node-logger').createRollingFileLogger( opts );

可以通过以下方式记录消息

  log.info('this is logged info message')
  log.warn('this is logged warn message')//etc..

加分:它可以将日志发送到控制台或套接字。您还可以附加到日志级别。

这是处理日志功能的最有效和最简单的方法。

于 2020-08-13T03:58:31.793 回答
0

这是用于记录具有完整堆栈跟踪的数据的轻量级模块

@grdon/记录器

 const logger = require('@grdon/logger')({
   defaultLogDirectory : __dirname + "/logs",
 })
 // ...
logger(someParams, 'logfile.txt')
logger(anotherParams, 'anotherLogFile.log')
于 2021-09-21T12:39:23.123 回答