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.
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:
info
di level kustom AndaJika 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.
set kerja yang lebih lengkap: https://github.com/Offirmo/html_tests/blob/master/incubator/_nodexps/winston_004_custom_levels/server.js
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
lihat versi saya: https://Gist.github.com/vikas5914/cf568748ac89446e19ecd5e2e6900443
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?
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:
Ini sebagian besar berkaitan dengan kondisi ini di lib/winston/logger.js:
Karena transport.level default diatur ke
info
di lib/winston/transports/transport.js di sini:Anda harus melakukan salah satu dari dua hal untuk menggunakan level kustom, selain menentukan level default pada logger:
info
di level kustom AndaJika 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!