Winston: Transportasi Bersama

Dibuat pada 16 Feb 2012  ·  25Komentar  ·  Sumber: winstonjs/winston

Saya mengalami masalah dalam menyiapkan transportasi bersama.

Saya menggunakan metode ini untuk menambahkan transportasi bersama:

winston.loggers.add('some-category', {
    transports: [
      // Setup your shared transports here
    ]
});

Pada dasarnya, saya memiliki dua jenis logger satu "debugLogger", dan kemudian sejumlah besar "specificDebugLoggers". Saya ingin logger debug spesifik masing-masing mendapatkan file mereka sendiri, tetapi saya juga ingin mereka mencatat output ke file debug utama.

Namun, ketika saya mencoba dan membagikan transportasi, saya mendapatkan kesalahan ini:

Error: Transport already attached: file

Inilah yang saya lakukan:

debugFileTransport = {
    filename: '/var/log/mycoolapp/debug.log',
};

// Here is how the main debug log is created.
winston.loggers.add('debugLogger', {
  transports: [
    new winston.transports.File(debugFileTransport)  // Here is the shared transport
  ]
});

// And here is how the specific debug logs get created.
createLogger = function(name, filepath) {
  winston.loggers.add(name, {
    transports: [
      new winston.transports.File(debugFileTransport), // Here is the shared transport
      new winston.transports.File({
        filename: filepath,
      })
    ]
  });
  return winston.loggers.get(name);
};
feature request

Komentar yang paling membantu

@ash211 @gdbtek atau siapa pun yang melihat utas ini,
Anda harus mengatur bidang name di opsi. Ini digunakan untuk mendeteksi transportasi duplikat.

new winston.transports.File({ filename: './logs/error.log', name: 'file.error', level: 'error' }),
new winston.transports.File({ filename: './logs/info.log', name: 'file.info', level: 'info' }),
new winston.transports.File({ filename: './logs/debug.log', name: 'file.debug', level: 'debug' })

Semua 25 komentar

@bluepines Mengapa Anda membutuhkan dua file transport? Ini saat ini tidak didukung.

Saya juga menyukai ini, kasus penggunaan saya adalah:

  • app.log : Semuanya.
  • app-error.log : Hanya kesalahan.

File yang berbeda mendapatkan logrotate, ketekunan, dll. perawatan yang berbeda. Saya juga dapat melihat kasus penggunaan secara lebih umum untuk beberapa transportasi dari jenis yang sama dengan konfigurasi yang berbeda.

@ryan-roemer Itu sudah dimungkinkan melalui level log yang dapat dikonfigurasi.

@indexzero Terima kasih atas tanggapannya. Bisakah Anda memposting contoh cepat? Saya tidak melihat bagaimana melakukan ini dari readme. Idealnya, saya ingin info-semuanya lebih tinggi di satu log, dan duplikat kesalahan hanya di log lain. Saya mencoba melakukan ini:

Log = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({
      level: "info",
      filename: "foo.log"
    }),
    new (winston.transports.File)({
      level: "error",
      filename: "foo-error.log"
    })
  ]
});

Dan, mohon maaf karena menyumbat masalah ini!

Saya juga bingung bagaimana melakukan ini. @ryan-roemer apakah Anda mengetahuinya pada akhirnya?

@domenic Tidak - kasus penggunaan saya berubah menjadi menggunakan dua transportasi yang berbeda, sehingga menghindari masalah. Saya tertarik untuk mengetahui contoh yang baik tentang bagaimana melakukan ini dengan transportasi yang sama!

Tidak bisakah Anda menggunakan 2 logger yang berbeda? Saya membutuhkan satu untuk logging permintaan dan yang lainnya untuk debug/std out logging, jadi saya baru saja membuat 2 instance.

//configure the logger
var requestLogger = new (winston.Logger)({
    transports: [
//      new (winston.transports.Console)(),
      new (winston.transports.File)({ 
          filename: '../logs/requests.log',
          json: true,
          maxsize: 1024,
          maxFiles: 2
      })
    ]
  });

//configure the logger
var logger = new (winston.Logger)({
    transports: [
//      new (winston.transports.Console)(),
      new (winston.transports.File)({ 
          filename: '../logs/stdout.log',
          json: true,
          maxsize: 1024,
          maxFiles: 2
      })
    ]
  });

@rickcrawford Terima kasih telah menawarkan beberapa saran.

Sayangnya, kasus penggunaan ideal saya adalah menjadikan ini masalah konfigurasi murni -- (1) Saya login pada level yang berbeda menggunakan _one_ logger, dan (2) Saya memiliki output log yang berbeda pada level yang berbeda (dan beberapa kali tumpang tindih).

Memiliki logger.error dan logger.info jauh lebih konsisten dan mudah diubah dan dipelihara dari waktu ke waktu daripada harus menyisipkan errorLogger.error dan nonerrorLogger.info seluruh kode saya.

@ryan-roemer Saya setuju itu harus mirip dengan pendekatan log4j untuk memiliki beberapa logger yang ditugaskan ke 1 root logger.

+1 untuk ini.

Contoh kasus penggunaan saya:

var logger = new (winston.Logger)({
    exitOnError: false, //don't crash on exception
    transports: [
        new (winston.transports.Console)(), //always use the console
        new (winston.transports.File)({ filename: 'logs/server.log' }), //log everything to the server.log
        new (winston.transports.File)({ level: 'error', filename: 'logs/error.log', handleExceptions: true }), //log errors and exceptions to the error.log
        new (winston.transports.File)({ level: 'warn', filename:'logs/warn.log' }), //log warn to the warn.log
        new (winston.transports.File)({ level: 'info', filename:'logs/info.log' }) //log info to the info.log
    ]
});

Ya lagi +1 untuk ini. Kasus penggunaan

var winston = require('winston');
winston.add(winston.transports.File, { filename: '/path/to/logfile.log', json: false, maxsize: 10485760, level: 'info' }); 
winston.add(winston.transports.File, { filename: '/path/to/errorfile.log', json: false, maxsize: 10485760, level: 'error' }); 

Tampaknya aneh Anda dapat menentukan level dengan transportasi tetapi kemudian tidak dapat menambahkan yang berbeda untuk level yang berbeda.

@k0nG Sepertinya perubahan satu baris? Tarik-permintaan?

Diperbaiki ^^

Keren terima kasih!

Saya masih mendapatkan kesalahan ini di 0,7.2 dan https://github.com/flatiron/winston/pull/149

Apakah Anda yakin itu bekerja?

Tes itu masih gagal untuk saya, saya tidak berpikir komit lain memperbaikinya. Saya akan membuka kembali masalah ini jika saya bisa

@all , apakah saya benar bahwa winston masih belum mendukung beberapa pengangkutan File dalam satu logger? Dalam pengujian saya, pesan kesalahan terkadang masuk ke file warn.log.

==> error.log <==
{"level":"error","message":"errorrrr","timestamp":"2013-08-26T18:08:33.869Z"}

==> info.log <==
{"level":"info","message":"infoooo ","timestamp":"2013-08-26T18:08:33.867Z"}
{"level":"error","message":"errorrrr","timestamp":"2013-08-26T18:08:33.869Z"}
{"level":"warn","message":"warnnnnnn","timestamp":"2013-08-26T18:08:33.869Z"}

==> warn.log <==
{"level":"error","message":"errorrrr","timestamp":"2013-08-26T18:08:33.869Z"}
{"level":"warn","message":"warnnnnnn","timestamp":"2013-08-26T18:08:33.869Z"}

@ash211 @gdbtek atau siapa pun yang melihat utas ini,
Anda harus mengatur bidang name di opsi. Ini digunakan untuk mendeteksi transportasi duplikat.

new winston.transports.File({ filename: './logs/error.log', name: 'file.error', level: 'error' }),
new winston.transports.File({ filename: './logs/info.log', name: 'file.info', level: 'info' }),
new winston.transports.File({ filename: './logs/debug.log', name: 'file.debug', level: 'debug' })

@yhpark dan @ash211 , saya sebenarnya mengatur bidang nama dan nama file tetapi masih tidak berfungsi seperti yang diharapkan. Jika ada yang melihat apa yang saya lewatkan, beri tahu saya. Terima kasih.

  var fileTransportConfig = function (level, json, maxFile, maxSize, path) {
    return new (winston.transports.File)({
      colorize: true,
      filename: path,
      handleExceptions: true,
      json: json,
      level: level,
      maxFiles: maxFile,
      maxsize: maxSize,
      name: level,
      timestamp: timestampFormat
    });
  };

  fileTransportConfig('error', options.json, options.maxFile, options.maxSize, options.path.error),
  fileTransportConfig('info', options.json, options.maxFile, options.maxSize, options.path.information),
  fileTransportConfig('warn', options.json, options.maxFile, options.maxSize, options.path.warning)

Bagaimana transport yang diberikan setelah itu mencatat pesan untuk menyimpannya hanya untuk dirinya sendiri dan tidak meneruskannya ke transport lain? Saya ingin mencegah penyalinan pesan log yang sama ke beberapa transportasi, jika setidaknya satu menanganinya.

Terima kasih untuk ini semua orang. Bekerja dengan baik!

Saya menemukan masalah ini dalam waktu 5 menit setelah mencoba menggunakan winston dalam proyek saya, dan harus mencari solusi di sini. Fakta bahwa winston tidak menyukai beberapa transport dengan tipe yang sama tidak disebutkan dalam dokumentasi, dan opsi name .

Ingin mencatat tingkat kesalahan yang berbeda ke file yang berbeda tidak mungkin menjadi kasus penggunaan yang tidak jelas, dan dokumen transport menyarankan bahwa transport dapat dikomposisi padahal sebenarnya mereka mengandalkan transport yang memiliki nama unik (yang saya anggap default untuk nama jenis transport ). Dokumen bisa lebih jelas dalam hal ini.

Tetap di master akan keluar di 0.9.0 setelah semua PR 0.9.0 telah digabungkan.

Hai, saya telah mengikuti bersama dengan dokumen dan masalah sebelumnya. Saya tidak lagi menerima masalah asli tetapi saya hanya mendapatkan output ke satu file:

const winston = require(`winston`);

winston.level = 'debug';

winston.configure({
    transports: [
        new (winston.transports.File)({ filename: 'logs/info.log', name: 'file.info', level: 'info'}),
        new (winston.transports.File)({ filename: 'logs/warn.log', name: 'file.error', level: 'error'})
    ]
});


module.exports = winston;
Apakah halaman ini membantu?
0 / 5 - 0 peringkat