Winston: Level log khusus

Dibuat pada 8 Feb 2012  ·  27Komentar  ·  Sumber: winstonjs/winston

Saya tidak dapat membuat level log khusus berfungsi. Saya sudah mencoba memperbarui node, menginstal winston melalui npm, dan mengkloning repo winston. Kode contoh di readme untuk level khusus berjalan tanpa kesalahan:

 var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    },
    colors: {
      foo: 'blue',
      bar: 'green',
      baz: 'yellow',
      foobar: 'red'
    }
  };

  var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels }); 
  customLevelLogger.foobar('some foobar level-ed message');

tetapi tidak ada yang dicetak ke konsol.

Saya juga sudah mencoba variasi

  var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ filename: 'somefile.log' })
    ]
  });

dengan logger.addLevels() tapi saya mendapatkan hasil yang sama. Level log baru yang saya lewati tidak melakukan apa pun.

Dokumen asli (info, debug, dll.) tidak tersedia - seperti yang diharapkan.

Komentar yang paling membantu

Jadi saya bisa menggali lebih dalam dan mencari tahu lebih banyak tentang apa yang terjadi. Dari semua contoh kode yang saya lihat di dokumentasi dan utas ini, harapannya adalah menyetel level default pada logger adalah satu-satunya konfigurasi yang diperlukan untuk menggunakan level kustom.

Saya menemukan bahwa Anda tidak hanya perlu mengatur level logger default tetapi juga level transport default untuk mendapatkan contoh di atas dan dalam dokumentasi agar berfungsi seperti yang diharapkan. Dari contoh Anda di atas, ubah baris ini menjadi yang berikut:

transports: [new winston.transports.Console({level: foobar})]

Ini sebagian besar berkaitan dengan kondisi ini di lib/winston/logger.js:

if ((transport.level && self.levels[transport.level] <= self.levels[level]) 
    || (!transport.level && self.levels[self.level] <= self.levels[level])) 

Karena transport.level default diatur ke info di lib/winston/transports/transport.js di sini:

this.level = options.level  || 'info';

Anda harus melakukan salah satu dari dua hal untuk menggunakan level kustom, selain menentukan level default pada logger:

  1. Tentukan level default pada transportasi Anda
  2. Sertakan level info di level kustom Anda

Jika ini tidak dirancang, itu dapat diperbaiki dengan mengubah penugasan variabel bersyarat dan paksa. Jika itu adalah dengan desain, dokumentasi harus tweak sedikit terlalu menghindari kebingungan.

Saya akan dengan senang hati membantu menyelesaikannya, beri tahu saya arah mana yang ingin Anda tuju.
Terima kasih!

Semua 27 komentar

Anda perlu mengatur levels dan transports :

 var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    },
    colors: {
      foo: 'blue',
      bar: 'green',
      baz: 'yellow',
      foobar: 'red'
    }
  };

  var customLevelLogger = new (winston.Logger)({
    level: 'foo', 
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
  }); 
  customLevelLogger.foobar('some foobar level-ed message');

Hai indexzero, saya mengalami masalah yang sama saat bekerja dengan versi kode contoh Anda yang sedikit disederhanakan:

var winston = require('winston')
var myCustomLevels = {
    levels: {
      foo: 0,
      bar: 1,
      baz: 2,
      foobar: 3
    }
};

var customLevelLogger = new (winston.Logger)({
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
});
customLevelLogger.foobar('some foobar level-ed message');

Tidak akan berhasil. Itu tidak mencetak apa pun ke konsol:

ruby-1.9.2-p290:winston-test: node server.js 
ruby-1.9.2-p290:winston-test:

Jika saya memodifikasi dua level pertama untuk memasukkan info dan debug, saya akan mendapatkan hasil yang diharapkan:

var myCustomLevels = {
    levels: {
      info: 0,
      debug: 1,
      baz: 2,
      foobar: 3
    }
};

var customLevelLogger = new (winston.Logger)({
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
});
customLevelLogger.foobar('some foobar level-ed message');

Akan menghasilkan:

ruby-1.9.2-p290:winston-test: node server.js 
foobar: some foobar level-ed message
ruby-1.9.2-p290:winston-test:

>.< @JCBarry Baca contoh kode saya dengan cermat. Anda kehilangan properti level yang diteruskan ke konstruktor winston.Logger :

 var customLevelLogger = new (winston.Logger)({
    level: 'foo', // You are not passing a level parameter, so it is defaulting to `info` which doesnt exist.
    levels: myCustomLevels.levels,
    transports: [new winston.transports.Console()]
  }); 
  customLevelLogger.foobar('some foobar level-ed message');

Sampel kode persis Anda yang disalin dan ditempelkan ke skrip simpul tidak menghasilkan apa pun ke terminal. Juga, karena Anda menentukan level mana yang akan digunakan secara khusus ("foobar") dalam kasus ini, mengapa ia peduli dengan level default?

Saya juga telah mencoba kedua contoh kode yang Anda berikan. Tak satu pun dari mereka mengeluarkan apa pun ke konsol.

Tidak sampai Anda memasukkan "debug" dan "info" di tingkat khusus, semuanya akan berfungsi seperti yang diharapkan.

Ini adalah video saya menggunakan kode contoh Anda, dan mengubah 2 kunci itu.

http://screencast.com/t/CxWAleAueeRW

Juga, mengeluarkan level:'foo', tampaknya tidak membuat perbedaan.

Jadi saya bisa menggali lebih dalam dan mencari tahu lebih banyak tentang apa yang terjadi. Dari semua contoh kode yang saya lihat di dokumentasi dan utas ini, harapannya adalah menyetel level default pada logger adalah satu-satunya konfigurasi yang diperlukan untuk menggunakan level kustom.

Saya menemukan bahwa Anda tidak hanya perlu mengatur level logger default tetapi juga level transport default untuk mendapatkan contoh di atas dan dalam dokumentasi agar berfungsi seperti yang diharapkan. Dari contoh Anda di atas, ubah baris ini menjadi yang berikut:

transports: [new winston.transports.Console({level: foobar})]

Ini sebagian besar berkaitan dengan kondisi ini di lib/winston/logger.js:

if ((transport.level && self.levels[transport.level] <= self.levels[level]) 
    || (!transport.level && self.levels[self.level] <= self.levels[level])) 

Karena transport.level default diatur ke info di lib/winston/transports/transport.js di sini:

this.level = options.level  || 'info';

Anda harus melakukan salah satu dari dua hal untuk menggunakan level kustom, selain menentukan level default pada logger:

  1. Tentukan level default pada transportasi Anda
  2. Sertakan level info di level kustom Anda

Jika ini tidak dirancang, itu dapat diperbaiki dengan mengubah penugasan variabel bersyarat dan paksa. Jika itu adalah dengan desain, dokumentasi harus tweak sedikit terlalu menghindari kebingungan.

Saya akan dengan senang hati membantu menyelesaikannya, beri tahu saya arah mana yang ingin Anda tuju.
Terima kasih!

Hai Indeks,
Hanya ingin tahu apakah saya bisa membantu dengan cara apa pun yang berkaitan dengan ini?

Terima kasih!

Terima kasih JCBarry, meskipun seharusnya begitu ({level: "foobar"}).

Tampaknya mengonfigurasi winston adalah sedikit seni hitam, kecuali jika Anda adalah penulisnya tentu saja.

Jika ada gunanya bagi seseorang, inilah contoh saya yang berfungsi penuh dengan 2 logger, level khusus, dan pewarnaan konsol: https://Gist.github.com/2570757

Itu tampaknya berhasil:

var logger = new (Winston.Logger)({
    levels: {trace: 0, notice: 1, warning: 2, error: 3},
    transports: [
        new Winston.transports.Console({
            level: "trace",
            colorize: true
        })
    ],
    colors: {trace: "white", notice: "cyan", warning: "yellow", error: "red"}
});

+1 @garth

terima kasih @garth

Hai, saya memiliki masalah yang sama. Saya menyelesaikannya dengan memulai dengan "info : 0"

levels : {
        info    : 0,
        emerg   : 1,
        alert   : 2,
        crit    : 3,
        err     : 4,
        warn    : 5,
        notice  : 6,
        debug   : 7
}

Aneh, apa yang saya temui:

Level saya adalah (saya menyalin dari pengaturan sistem default, dan menambahkan jejak) (require('winston').config.syslog.levels)

{"emerg":0,"alert":1,"crit":2,"error":3,"warning":4,"notice":5,"info":6,"debug":7, " jejak":8}

Ketika saya membalik urutannya, itu berhasil ... Saya merasa aneh karena syslog.levels dibalik.

{"emerg":8,"alert":7,"crit":6,"error":5,"warning":4,"notice":3,"info":2,"debug":1, " jejak":0}

Tapi itu berfungsi dengan baik sekarang.

Aneh, tetapi saya mengonfirmasi bahwa itu juga berfungsi untuk saya setelah urutannya terbalik dibandingkan dengan syslog.

+1 @lucastschmidt meskipun saya merasa aneh melakukannya. Saya ingin tahu alasan mengapa membalikkan level berhasil; apakah itu ada hubungannya dengan nilai yang bertentangan vs syslog?

Yah @kb19 , sebenarnya saya tidak tahu, saya tidak menyelidiki kodenya.

Hai, saya memiliki masalah yang sama. Saya menyelesaikannya dengan mengubah pesanan

konfigurasi var = {
tingkat: {
debug: 0,
informasi: 1,
bantuan: 2,
memperingatkan: 3,
kesalahan: 4,
data: 5,
masukan: 6,
bertele-tele: 7,
cepat: 8,
bodoh: 9

 },
 colors: {
     debug: 'blue',
     info: 'green',
     help: 'cyan',
     warn: 'yellow',
     error: 'red',
     data: 'grey',
     input: 'grey',
     verbose: 'cyan',
     prompt: 'grey',
     silly: 'magenta'

 }

};

+1 Tidak berfungsi. Tidak bisa mendapatkan warna untuk bekerja sama sekali. Mencoba semua contoh yang tercantum di sini dan di dokumen utama.

Ya, saya mengalami masalah yang sama. Sudah mencoba semuanya, ada petunjuk tentang mengapa itu mungkin tidak berhasil?

+1

Sama :+1:

Hai,
Saya hanya ingin mencetak log khusus saya dalam sebuah file. tetapi bersama dengan info log khusus, debug juga mendapatkan pencetakan dalam file. apa yang harus dilakukan dalam kasus ini? tolong balas

Dari komentar di utas @vikas5914 , saya menyadari bahwa parameter level: ke logger/format bukanlah level log default, tetapi batas level log, dan semua yang 'di bawah' (artinya dengan angka yang lebih tinggi) akan tidak ditampilkan. Ini akan menjelaskan mengapa begitu banyak orang di sini sukses dengan mengubah urutan level log mereka.

akankah seseorang memperbarui dokumen dengan contoh yang berfungsi?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat