Node.js Günlüğü


177

Node.Js uygulamamda günlüğe kaydetmeme yardımcı olacak herhangi bir kütüphane var mı? Tek yapmak istediğim, tüm günlükleri bir Dosyaya yazmak istiyorum ve ayrıca belirli bir boyut veya tarihten sonra dosyayı yaymak gibi bir seçeneğe ihtiyacım var.


Tüm yapılandırma ayrıntılarını tek bir dosyada tutmaya ve bakım kolaylığı için yalnızca diğer uygulama dosyalarındaki yöntemleri kullanmaya çalışırken log4js im dahil ettim. Ama beklendiği gibi çalışmıyor. İşte yapmaya çalıştığım şey

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;

Bu dosyayı başka dosyalara ekledim ve denedim

log.error ("Hello Error Message");

Ama bu çalışmıyor. Bunda yanlış bir şey var mı?


1
log4js iyi görünüyor. hata seviyesini yanlış ayarladınız. şöyle olmalıdır: logger.setLevel (log4js.levels.ERROR);
Boklucius

Yanıtlar:


196

Winston oldukça iyi bir günlük kütüphanesidir. Günlükleri kullanarak bir dosyaya yazabilirsiniz.

Kod şöyle görünecektir:

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;

Daha sonra bunu aşağıdaki gibi kullanabilirsiniz:

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

logger.info('log to file');


3
Winston'u uzun zamandır kullandım. Buggy aldı ve ben npmlog lehine hendek var.
airportyh

8
@ herkes, winston tekrar korunuyor gibi görünüyor ... github.com/flatiron/winston/network
Daithí

Hızlı bir not: yukarıdaki örnekte renkli komut satırı çıktısı için logger.cli () yöntemini çağırın.
Duncan

1
Winston, yapılandırmasının bir .json dosyasından tanımlanmasına ve okunmasına izin vermez. Kötü tasarım, imo.
miniml

59

Scribe.JS Hafif Kayıt Cihazı

Birçok kaydediciye baktım ve hafif bir çözüm bulamadım - bu yüzden github'da yayınlanan basit bir çözüm yapmaya karar verdim.

  • Kullanıcı, tarih ve seviyeye göre düzenlenmiş dosyayı kaydeder
  • Size güzel bir çıktı verir (hepimiz bunu seviyoruz)
  • Kullanımı kolay HTML arayüzü

Umarım bu sana yardımcı olur.

Çevrimiçi Demo

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

Günlüklere Güvenli Web Erişimi

bir

Konsolda Çok Güzel Metin Yazdırır!

bir

Web Erişimi

bir

Github

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


5
bu kütüphane artık korunmamaktadır: github.com/bluejamesbond/…
Simon Meusel

30

Log4js , nodejs uygulaması için en popüler günlük kütüphanelerinden biridir.

Birçok harika özelliği destekler:

  1. Renkli konsol günlüğü
  2. Düğüm konsol.log işlevlerinin değiştirilmesi (isteğe bağlı)
  3. Dosya boyutuna göre günlük kaydı ile dosya ekleyicisi
  4. SMTP, GELF, hook.io, Loggly ekleyicisi
  5. Çok işlemcili ek (çalışan işlemleriniz olduğunda kullanışlıdır)
  6. Connect / express sunucuları için bir kaydedici
  7. Yapılandırılabilir günlük mesajı düzeni / modelleri
  8. Farklı günlük kategorileri için farklı günlük düzeyleri (uygulama günlüğünüzün bazı bölümlerini DEBUG, diğerleri yalnızca HATA vb.)

Misal:

  1. Kurulum: npm install log4js

  2. Yapılandırma ( ./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. Kullanımı:

    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');" soruna neden oluyor. Nedenini anlamıyorum, ama "ALL" dışında herhangi bir şeye ayarladığımda dosyada hiçbir şey yazdırılmıyor. Biraz araştırdım ve kodunuzu değiştirdim. Benim için iyi çalışıyor. İki dosya oluşturdum.

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

"Düğüm logger.test.js" çalıştırdığımda, test.log dosyasında yalnızca "HATA iletisi" görüyorum. Seviyeyi "TRACE" olarak değiştirirsem her iki satır test.log dosyasına yazdırılır.


2
logging.apache.org/log4j/1.2/manual.html Kaydedicilere düzey atanmış olabilir. Olası düzeyler kümesi, yani: TRACE, DEBUG, INFO, WARN, ERROR ve FATAL Seviyesinin kaydedicisinin seviyesinden daha yüksek veya ona eşit olması durumunda bir günlük kaydı talebinin etkinleştirildiği söylenir. Aksi takdirde, talebin devre dışı olduğu söylenir.
Shawn

3

Winston, geliştiricilerin çoğu için güçlü bir seçimdir. Winston'u uzun süredir kullanıyorum. Son zamanlarda uygulama günlük kaydını bir sonraki seviyeye taşıyan papertrail ile winston kullandım.

İşte kendi sitelerinden güzel bir ekran görüntüsü.

resim açıklamasını buraya girin

Ne kadar yararlı

  • farklı sistemlerden günlükleri tek bir yerden yönetebilirsiniz. Bu, iki arka uç iletişim kurduğunuzda ve her ikisinden de günlükleri yerinde görebildiğinizde çok yararlı olabilir.

  • Günlükler canlı. üretim sunucunuzun gerçek zamanlı günlüklerini görebilirsiniz.

  • Güçlü arama ve filtre

  • günlükte belirli bir metinle karşılaşırsa size e-posta göndermek için uyarılar oluşturabilirsiniz.

ve daha fazla http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Basit kullanarak yapılandırma winston, winston-expressve winston-papertraildüğüm modülleri.

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

Umarım bu birinin günlüklerini yönetmesine yardımcı olur!


1
Bu hala işe yarar, ancak winston'un v3'e yükseltilmesinden sonra bir uyarı alırsınız: "Papertrail eski bir winston taşımacılığıdır. Yükseltmeyi düşünün". Şu anda olağanüstü olan taşımada bir yükseltme var.
Jim Jimson

2

Basit bir günlük kaydı için bir 'nodejslogger' modülü kullanılabilir. Üç günlük kaydı vardır (BİLGİ, HATA, HATA AYIKLAMA)

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

D: Hata Ayıklama, I: Bilgi, E: Hata

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

Modüle şu adresten erişilebilir: https://www.npmjs.com/package/nodejslogger


0

Gözlemleyin errorLogger etrafında sarıcı logger.trace . Ancak logger seviyesi ERROR olduğundan logger.trace mesajını logger'ın append'lerine kaydetmez .

Düzeltme değiştirmektir logger.trace için logger.error gövdesindeki errorLogger .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.