OS: Ubuntu 14.04
NodeJS: 6.2.0
Winston: 2.2.0
Kode berikut tidak membuat file log:
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
Itu masuk ke terminal dengan baik:
2016-05-26T13:11:49.927Z - info: Holla
Tetapi tidak ada file log yang dibuat.
+1
+1
+1
+1
Tampaknya ada masalah di simpul 6 di fs.stat()
Pada beberapa alasan tidak pernah mengeksekusi panggilan balik fs.stat()
fs.stat(fullname, function (err, stats) {
if (err) {
if (err.code !== 'ENOENT') {
return self.emit('error', err);
}
return createAndFlush(0);
}
if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
//
// If `stats.size` is greater than the `maxsize` for
// this instance then try again
//
return self._incFile(function() {
checkFile(self._getFile());
});
}
createAndFlush(stats.size);
});
})(this._getFile());
Apakah sudah diperbaiki?
Saya memperbaiki masalah ini dengan memberikan jalur absolut seperti itu:
winston.add(winston.transports.File, { filename:
${__dirname}/logs/appError.log })
Ini bekerja untuk saya. Saya punya masalah baru-baru ini pada sebuah proyek dengan Winston menggunakan Atom dimana file Gitignore tidak menunjukkan di direktori file proyek di Atom karena pengaturan diperbarui dalam paket pohon-view ... (Option: Sembunyikan VCS Diabaikan File)
_Menggunakan Node 6.2.2 dan Winston 2.2.0._
Kode:
'use strict';
let Winston = require('winston');
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
Membuat file app.log dengan output: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"}
dan log ke konsol dengan 2016-07-01T19:29:14.034Z - info: Holla
Saya baru saja mengalami masalah ini. Direktori harus ada terlebih dahulu. winston akan membuat file baru untuk Anda, tetapi tampaknya tidak membuat direktori baru untuk Anda (misalnya, Anda perlu membuat direktori "logs" jika Anda mencoba masuk ke file yang terletak di logs/app.js)
Wish winston memeriksa apakah folder/direktori log ada, lalu buat folder/direktori log jika tidak ada saat startup. Saya pikir fs dapat melakukan ini dengan benar?
+1
+1
+1
if (!fs.existsSync('path') {
fs.mkdirSync('path');
}
http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/
Saya mengalami masalah ini dan menyelesaikannya menggunakan garis miring ganda:
Logger.loggerInfo = new Winston.Logger({
level: 'info',
transports: [
new Winston.transports.File({
filename: process.cwd() + '\\logs\\info.log',
timestamp: true
})
]
});
Saya melakukan beberapa tes dengan beberapa mekanisme logging lanjutan (termasuk winston) dan tampaknya logger tidak dapat menulis ke dalam file jika Anda melakukan exit bersih (process.exit(0)).
Menghapus keluar bersih memecahkan masalah.
@fvuilleumier Anda benar, terima kasih, namun menghapus tidak nyaman untuk alat CLI misalnya. Tetapi menggunakan process.exitCode = 0
(atau kode apa pun) berfungsi dengan baik karena memungkinkan loop selesai dengan anggun.
Ada contoh untuk membuat file
const filename = path.join(__dirname, 'created-logfile.log');
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename })
]
});
@fvuilleumier @nicosommi tetapi bagaimana jika saya ingin keluar dari aplikasi setelah mencatat kesalahan? Apakah Anda berhasil menemukan jalan-jalan?
@danbrownbox pada akhirnya skrip js hanyalah file yang dieksekusi hingga akhir, jadi jika Anda ingin keluar dari aplikasi setelah beberapa baris tertentu, Anda hanya perlu membangun aliran eksekusi yang tepat pada fungsi Anda
Tidak berfungsi dengan jalur relatif di mac saya, tetapi membuat file jika jalur absolut disediakan.
Apakah saya menggunakan absolut atau relatif tidak masalah. Ini tidak berfungsi untuk saya saat menambahkan transportasi secara dinamis.
function createLogFile(appName) {
pathUtils.ensureDirectoryExists('logs');
pathUtils.ensureDirectoryExists(`logs/${appName}`);
winston.add(winston.transports.File, {
level: 'debug',
//filename: `logs/${appName}/export-${Date.now()}.log`,
//filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
json: false,
formatter: _formatLog()
});
}
Namun, jika saya menambahkan transportasi ini di createLogger()
ia bekerja dengan mutlak.
Jawaban ini bekerja untuk saya.
Ini kode saya:
````
const winston = membutuhkan('winston');
const logDir = 'log';
const fs = membutuhkan('fs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const logger = winston.createLogger({
tingkat: 'info',
format: winston.format.json(),
exitOnError: salah,
transportasi: [
baru (memerlukan('winston-daily-rotate-file'))({
nama file: ${logDir}/logs.log
,
datePattern: 'YYYY-MM-DD-HH',
zipArchive: benar,
tingkat: 'konyol'
}),
baru (memerlukan('winston-daily-rotate-file'))({
nama file: ${logDir}/errors.log
,
datePattern: 'YYYY-MM-DD-HH',
zipArchive: benar,
tingkat: 'kesalahan'
})
],
});
ekspor {logger};
logger.silly('tes konyol');
logger.info('pengujian info');
logger.warn('peringatan tes');
logger.error('pengujian kesalahan');
````
Saya penulis asli masalah ini (akun berbeda). Saya kembali ... karena saya memiliki masalah yang sama dan saya lupa bagaimana saya menyelesaikannya
Apakah Anda menggunakan [email protected]
? Apakah Anda memastikan direktori ada di mana Anda ingin file log berada ( winston
tidak akan membuat direktori untuk Anda, meskipun kami akan menerima PR yang menjadikannya opsi atau bahkan perilaku default). Kami mungkin harus menutup masalah lama ini setelah kami dapat membuat Anda aktif dan berjalan lagi :)
Saya bersedia mengerjakan PR untuk ini di waktu luang saya, jadi serahkan pada saya 👍
Dingin! 👍 Untuk menutup ini, kita dapat melacak hal-hal direktori di #1465 . Masalah terpisah harus diuji terhadap master
dan dibuka sebagai masalah baru jika masalah tetap ada. Terima kasih!
Komentar yang paling membantu
Saya baru saja mengalami masalah ini. Direktori harus ada terlebih dahulu. winston akan membuat file baru untuk Anda, tetapi tampaknya tidak membuat direktori baru untuk Anda (misalnya, Anda perlu membuat direktori "logs" jika Anda mencoba masuk ke file yang terletak di logs/app.js)