Ghi nhật ký Node.js


177

Có thư viện nào giúp tôi xử lý việc đăng nhập vào ứng dụng Node.Js của tôi không? Tất cả những gì tôi muốn làm là, tôi muốn viết tất cả các bản ghi vào một Tệp và tôi cũng cần một tùy chọn như tung ra tệp sau kích thước hoặc ngày nhất định.


Tôi đã kết hợp log4js tôi đang cố gắng giữ tất cả các chi tiết cấu hình trong một tệp và chỉ sử dụng các phương thức trong các tệp ứng dụng khác để dễ bảo trì. Nhưng nó không hoạt động như mong đợi. Đây là những gì tôi đang cố gắng làm

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;

Tôi đã bao gồm tệp này trong các tệp khác và đã thử

log.error ("Hello Error Message");

Nhưng nó không hoạt động. Có điều gì sai trong việc này?


1
log4js có vẻ ổn. bạn đã đặt sai mức độ. nó phải là: logger.setLevel (log4js.levels.ERROR);
Boklucius

Câu trả lời:


196

Winston là một thư viện đăng nhập khá tốt. Bạn có thể viết nhật ký ra một tệp bằng cách sử dụng nó.

Mã sẽ trông giống như:

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;

Sau đó, bạn có thể sử dụng như thế này:

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

logger.info('log to file');


3
Tôi đã sử dụng winston trong một thời gian dài. Nó đã nhận được lỗi và tôi đã bỏ nó để ủng hộ npmlog.
sân bay

8
@everyone, dường như winston đang được duy trì một lần nữa ... github.com/flatiron/winston/network
Daithí

Chỉ cần một ghi chú nhanh: gọi logger.cli () trong ví dụ trên cho đầu ra dòng lệnh được tô màu.
Duncan

1
Winston không cho phép cấu hình của nó được xác định và đọc từ tệp .json. Thiết kế kém, imo.
tối thiểu

59

Scribe.JS Logger nhẹ

Tôi đã xem qua nhiều logger và tôi không thể tìm thấy một giải pháp nhẹ - vì vậy tôi quyết định thực hiện một giải pháp đơn giản được đăng trên github.

  • Lưu tệp được sắp xếp theo người dùng, ngày và cấp
  • Cung cấp cho bạn một đầu ra đẹp (tất cả chúng ta đều thích điều đó)
  • Giao diện HTML dễ sử dụng

Tôi hy vọng điều này sẽ giúp bạn ra ngoài.

Demo trực tuyến

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

Truy cập web an toàn vào nhật ký

Một

In văn bản đẹp lên bảng điều khiển quá!

Một

Đăng nhập trang web

Một

Github

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


5
thư viện này không còn được duy trì: github.com/bluejamesbond/ Kẻ
Simon Meusel

30

Log4js là một trong những thư viện ghi nhật ký phổ biến nhất cho ứng dụng nodejs.

Nó hỗ trợ nhiều tính năng thú vị:

  1. Bảng điều khiển màu ghi
  2. Thay thế các hàm console.log của nút (tùy chọn)
  3. Trình nối tệp, với bản ghi nhật ký dựa trên kích thước tệp
  4. SMTP, GELF, hook.io, Appgly
  5. Ứng dụng đa xử lý (hữu ích khi bạn có quy trình worker)
  6. Một logger cho các máy chủ kết nối / tốc hành
  7. Bố cục / mẫu thông điệp tường trình cấu hình
  8. Các mức nhật ký khác nhau cho các danh mục nhật ký khác nhau (tạo một số phần trong nhật ký ứng dụng của bạn dưới dạng DEBUG, các phần khác chỉ là LRI, v.v.)

Thí dụ:

  1. Cài đặt: npm install log4js

  2. Cấu hình ( ./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. Sử dụng:

    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 ('LRI');" đang gây ra vấn đề Tôi không hiểu tại sao, nhưng khi tôi đặt nó thành bất cứ thứ gì ngoài "TẤT CẢ", không có gì được in trong tệp. Tôi chọc một chút và sửa đổi mã của bạn. Nó đang làm việc tốt cho tôi. Tôi đã tạo hai tập tin.

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

Khi tôi chạy "nút logger.test.js", tôi chỉ thấy "thông báo ERROR" trong tệp test.log. Nếu tôi thay đổi cấp độ thành "TRACE" thì cả hai dòng được in trên test.log.


2
log.apache.org/log4j/1.2/manual.html Trình ghi nhật ký có thể được chỉ định cấp. Tập hợp các mức có thể, đó là: TRACE, DEBUG, INFO, WARN, ERROR và FATAL Yêu cầu ghi nhật ký được cho là được kích hoạt nếu mức của nó cao hơn hoặc bằng mức của trình ghi nhật ký. Nếu không, yêu cầu được cho là bị vô hiệu hóa.
Shawn C.

3

Winston là sự lựa chọn mạnh mẽ cho hầu hết các nhà phát triển. Tôi đã sử dụng winston từ lâu. Gần đây tôi đã sử dụng winston với papertrail để đăng nhập ứng dụng lên cấp độ tiếp theo.

Đây là một ảnh chụp màn hình đẹp từ trang web của họ.

nhập mô tả hình ảnh ở đây

Nó hữu ích như thế nào

  • bạn có thể quản lý nhật ký từ các hệ thống khác nhau tại một nơi. điều này có thể rất hữu ích khi bạn có hai giao tiếp phụ trợ và có thể thấy các bản ghi từ cả hai tại chỗ.

  • Nhật ký đang hoạt động. bạn có thể xem nhật ký thời gian thực của máy chủ sản xuất của bạn.

  • Bộ lọc và tìm kiếm mạnh mẽ

  • bạn có thể tạo thông báo để gửi email cho bạn nếu nó gặp văn bản cụ thể trong nhật ký.

và bạn có thể tìm thêm http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Một cấu hình đơn giản sử dụng winston, winston-expresswinston-papertrailmodule node.

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

Tôi hy vọng điều này sẽ giúp ai đó quản lý nhật ký của họ !!


1
Điều này vẫn hoạt động, tuy nhiên sau khi nâng cấp winston lên v3, bạn nhận được cảnh báo: "Papertrail là một phương tiện vận chuyển winston cũ. Hãy xem xét nâng cấp". Có một bản nâng cấp cho giao thông hiện đang nổi bật.
Jim Jimson

2

Một mô-đun 'nodejslogger' có thể được sử dụng để ghi nhật ký đơn giản. Nó có ba cấp ghi nhật ký (INFO, ERROR, DEBUG)

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

D: Gỡ lỗi, I: Thông tin, E: Lỗi

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

Mô-đun có thể được truy cập tại: https://www.npmjs.com/package/nodejslogger


0

Quan sát rằng errorLogger là một trình bao bọc xung quanh logger.trace . Nhưng mức độ của logger là ERROR vì vậy logger.trace sẽ không ghi thông điệp của nó tới các appender của logger .

Cách khắc phục là thay đổi logger.trace thành logger.error trong phần thân của errorLogger .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.