Ini tetap terlalu luas karena Anda TIDAK dapat melakukannya dari mesin klien.
Joshua
Jawaban:
112
Saya sendiri menghadapi masalah yang sama. Ada dua cara saya bisa melakukan ini.
Jika Anda menyertakan Winston, biasanya defaultnya adalah menambahkan transport Konsol. Agar stempel waktu berfungsi dalam kasus default ini, saya perlu:
Hapus transport konsol dan tambahkan lagi dengan opsi timestamp.
Buat objek Logger Anda sendiri dengan opsi stempel waktu disetel ke true.
Pertama:
var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console,{'timestamp':true});
Opsi kedua, dan lebih bersih:
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
Beberapa opsi lain untuk pengangkutan Konsol dapat ditemukan di sini :
level: Level pesan yang harus dicatat oleh transport ini (default 'debug').
silent: Bendera Boolean yang menunjukkan apakah akan menekan keluaran (default salah).
colorize: Bendera Boolean yang menunjukkan apakah kita harus mewarnai keluaran (default salah).
timestamp: Bendera Boolean yang menunjukkan apakah kita harus menambahkan keluaran dengan stempel waktu (default false). Jika fungsi ditentukan, nilai kembaliannya akan digunakan sebagai pengganti cap waktu.
Luar biasa dan sederhana pada saat bersamaan. Terima kasih!
kolrie
7
Ini bagus. Saya biasanya membungkus ini dalam file khusus sehingga saya dapat dengan mudah mendapatkan logger saya yang dikonfigurasi dari file apa pun, yaitu, saya meletakkan kode di atas (opsi 2) di file baru logger.js, diikuti oleh module.exports = logger; kemudian dari file apa pun saya melakukan var logger = require ('./ logger.js') dan kemudian dapat melakukan logger.info ('hello') dari file apa pun dan mendapatkan konfigurasi yang sama dari Winston.
JHH
TypeError: (nilai antara) bukan sebuah fungsi
Urasquirrel
81
Jawaban di atas tidak berhasil untuk saya. Jika Anda mencoba menambahkan cap waktu ke log Anda menggunakan versi terbaru Winston - 3.0.0-rc1, ini berfungsi seperti pesona:
Saya menggunakan 'format.combine ()'. Karena saya membutuhkan stempel waktu pada semua transportasi saya, saya menambahkan opsi pemformatan di dalam createLogger, daripada di dalam setiap transportasi. Output saya pada konsol dan file (activity.log) adalah sebagai berikut:
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
Kita dapat menambahkan pemformatan ke stempel waktu ini di 'format.combine ()' seperti biasa menggunakan:
Apakah ini juga berhasil logger.info('Message', someObject)? Saya menyiapkan format kustom menggunakan gabungan dan sepertinya saya tidak bisa mendapatkan yang someObjectdisertakan dalam pesan log.
Sesuatu Pada tanggal
1
Saya bisa someObjectdisertakan dengan menggunakan pernyataan printf berikut ${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}. Ini mencakup level, stempel waktu, dan pesan yang saya rasa dapat saya hapus.
Sesuatu Pada tanggal
9
Anda dapat menggunakan util bawaan dan selamanya untuk mencapai logging dengan timestap untuk server nodejs Anda. Saat Anda memulai server, tambahkan output log sebagai bagian dari parameter:
forever start -ao log/out.log server.js
Dan kemudian Anda dapat menulis util di server.js Anda
server.js
var util = require('util');
util.log("something with timestamp");
Outputnya akan terlihat seperti ini pada file out.log:
Meskipun saya tidak mengetahui winston, ini adalah saran. Saya menggunakan log4js untuk logging & log saya secara default terlihat seperti ini
[2012-04-2316:36:02.965][INFO]Development-NodeApplication is running on port 8090[2012-04-2316:36:02.966][FATAL]Development-ConnectionTerminated to '127.0.0.1''6379'
Pengembangan adalah lingkungan proses node saya & [INFO | FATAL] adalah level log
Mempertahankan profil yang berbeda untuk logging dimungkinkan di log4js. Saya memiliki profil Pengembangan & Produksi. Juga ada tipe logger seperti rolling file appender, console appender, dll. Sebagai addon, file log Anda akan berwarna berdasarkan level log [Trace, Info, Debug, Error, Fatal];)
log4js akan menimpa console.log Anda Ini adalah parameter yang dapat dikonfigurasi sekarang dalam 0.5+
FYI: Versi log4js-node (0.5+) yang lebih baru tidak secara otomatis menimpa console.log.
Jeff Hiltz
@jeffhiltz Ya Anda benar :) Sekarang ini adalah parameter yang dapat dikonfigurasi
Tamil
2
Terkadang format stempel waktu default tidak nyaman bagi Anda. Anda dapat menggantinya dengan penerapan Anda.
Dari pada
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
kamu bisa menulis
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':function(){return<write your custom formatted date here>;}})]});
kita dapat menggunakan stempel konsol untuk menambahkan stempel waktu dan level log ke konsol yang ada: require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Solusi lain adalah membungkus logger ke dalam file yang mengekspor beberapa fungsi seperti logger.info (), logger.error (), dll. Kemudian Anda cukup memberikan kunci tambahan untuk dikirim pada setiap log pesan.
Saya mengambil jawaban Biswadev dan membuat objek JSON yang dirangkai. Dengan cara ini jika saya perlu memproses log nanti, itu akan dalam format yang terstruktur dengan baik.
Jawaban:
Saya sendiri menghadapi masalah yang sama. Ada dua cara saya bisa melakukan ini.
Jika Anda menyertakan Winston, biasanya defaultnya adalah menambahkan transport Konsol. Agar stempel waktu berfungsi dalam kasus default ini, saya perlu:
Pertama:
Opsi kedua, dan lebih bersih:
Beberapa opsi lain untuk pengangkutan Konsol dapat ditemukan di sini :
sumber
Jawaban di atas tidak berhasil untuk saya. Jika Anda mencoba menambahkan cap waktu ke log Anda menggunakan versi terbaru Winston - 3.0.0-rc1, ini berfungsi seperti pesona:
Saya menggunakan 'format.combine ()'. Karena saya membutuhkan stempel waktu pada semua transportasi saya, saya menambahkan opsi pemformatan di dalam createLogger, daripada di dalam setiap transportasi. Output saya pada konsol dan file (activity.log) adalah sebagai berikut:
Kita dapat menambahkan pemformatan ke stempel waktu ini di 'format.combine ()' seperti biasa menggunakan:
sumber
Kita juga bisa melakukan seperti ini
sumber
logger.info('Message', someObject)
? Saya menyiapkan format kustom menggunakan gabungan dan sepertinya saya tidak bisa mendapatkan yangsomeObject
disertakan dalam pesan log.someObject
disertakan dengan menggunakan pernyataan printf berikut${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}
. Ini mencakup level, stempel waktu, dan pesan yang saya rasa dapat saya hapus.Anda dapat menggunakan util bawaan dan selamanya untuk mencapai logging dengan timestap untuk server nodejs Anda. Saat Anda memulai server, tambahkan output log sebagai bagian dari parameter:
Dan kemudian Anda dapat menulis util di server.js Anda
server.js
Outputnya akan terlihat seperti ini pada file out.log:
out.log
sumber
util.error()
melewatkan waktu keluaran.Meskipun saya tidak mengetahui winston, ini adalah saran. Saya menggunakan log4js untuk logging & log saya secara default terlihat seperti ini
Pengembangan adalah lingkungan proses node saya & [INFO | FATAL] adalah level log
Mempertahankan profil yang berbeda untuk logging dimungkinkan di log4js. Saya memiliki profil Pengembangan & Produksi. Juga ada tipe logger seperti rolling file appender, console appender, dll. Sebagai addon, file log Anda akan berwarna berdasarkan level log [Trace, Info, Debug, Error, Fatal];)
log4js akan menimpa console.log AndaIni adalah parameter yang dapat dikonfigurasi sekarang dalam 0.5+sumber
Terkadang format stempel waktu default tidak nyaman bagi Anda. Anda dapat menggantinya dengan penerapan Anda.
Dari pada
kamu bisa menulis
Lihat https://github.com/winstonjs/winston#custom-log-format untuk detailnya
sumber
kita dapat menggunakan stempel konsol untuk menambahkan stempel waktu dan level log ke konsol yang ada:
require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Lihat https://github.com/starak/node-console-stamp untuk detailnya
sumber
Solusi lain adalah membungkus logger ke dalam file yang mengekspor beberapa fungsi seperti logger.info (), logger.error (), dll. Kemudian Anda cukup memberikan kunci tambahan untuk dikirim pada setiap log pesan.
loggerService.js
apapun-file.js
log-Anda.log
sumber
Saya mengambil jawaban Biswadev dan membuat objek JSON yang dirangkai. Dengan cara ini jika saya perlu memproses log nanti, itu akan dalam format yang terstruktur dengan baik.
Pemakaian:
Keluaran:
file info.log:
Menghibur:
sumber