kami gunakan morgan
untuk mencatat transformasi ekspres kami:
var morgan = require('morgan');
morgan('combined');
// a format string
morgan(':remote-addr :method :url :uuid');
// a custom function
morgan(function (req, res) {
return req.method + ' ' + req.url + ' ' + req.uuid;
})
Juga, kami menggunakan winston
untuk mencatat logging kami yang lain:
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'info' }),
new (winston.transports.File)({ filename: '/var/log/log-file.log' })
]
});
Apakah ada cara untuk menggabungkan kedua logger tersebut? situasinya sekarang adalah morgan
menulis ke output standar saya, ketika winston
menulis ke /var/log/log-file.log
.
Saya berharap file logger akan digabungkan dari informasi transformasi ekspres, dan dari informasi lain yang saya inginkan ( logger.info()
) ..
Jawaban:
Artikel ini melakukan pekerjaan yang sangat baik untuk apa yang ingin Anda lakukan.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Untuk kode spesifik Anda, Anda mungkin memerlukan sesuatu seperti ini:
Ini akan mengatur Winston untuk menulis log ke konsol serta file. Kemudian Anda dapat menggunakan ekspresi terakhir untuk meneruskan output dari morgan middleware ke winston.
sumber
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
digunakanwinston.createLogger
sebagai penggantinew winston.Logger
Dalam Ketikan:
sumber
Perbarui baris terakhir untuk menghapus peringatan
sumber
untuk Ketikan cara lain untuk melakukannya, tanpa perlu membuat kelas adalah
Solusi ini diperoleh dari halaman Github ini https://github.com/winstonjs/winston/issues/1385 . Namun, penting untuk diperhatikan bahwa ada sedikit perbedaan antara kode kami. Dari pada:
Saya menggunakan:
Ini membantu saya karena saya tidak terlalu suka membuat kelas.
sumber
Morgan memiliki kebiasaan buruk untuk mengakhiri pesan dengan kata-kata
\n
untuk membuat semuanya teratur, Anda mungkin ingin menghapusnya sebelum menulisnya ke winston.Ini dapat dilakukan dengan berbagai cara seperti pada sisi format di winston, atau dengan memperbarui aliran Anda agar tidak menulis
\n
sumber