Artikel ini akan memperkenalkan kepada anda cara menggunakan perpustakaan Winston untuk membina fungsi pengelogan mudah dalam Node.js Saya harap ia akan membantu anda!
Winston ialah salah satu pustaka log sumber terbuka Node.js
yang berkuasa dan fleksibel Secara teorinya, Winston ialah log perpustakaan yang boleh merekodkan Logger semua mesej. Ini adalah alat yang sangat intuitif yang mudah untuk disesuaikan. Logik di belakangnya boleh diselaraskan dengan menukar beberapa baris kod. Ia menjadikan pengelogan ke lokasi storan berterusan seperti pangkalan data atau fail mudah dan mudah. [Pembelajaran yang disyorkan: "tutorial nodejs"]
Winston menyediakan fungsi berikut:
Kod amalan akan menambah fungsi pengelogan dalam projek perkhidmatan berpura-pura, pasang kebergantungan:
npm install winston --save
Seterusnya logger
perlu dimulakan Memandangkan sudah terdapat fail logger.js
dalam projek, buat satu lagi winstonLogger.js
Kod tersebut adalah seperti berikut:
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ transports: [ new transports.File({ filename: "logs/server.log", level: "info", format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf( (info) => `${info.level}: ${[info.timestamp]}: ${info.message}` ) ), }), ], });
dengan memanggil fungsi winston
dalam. createLogger
pustaka mulakan. Dalam objek transports
, anda boleh memberikan nama fail untuk menyimpan log dalam fail. Secara lalai, pengelogan tidak diformat dan dicetak sebagai rentetan JSON dengan dua parameter, mesej log dan tahap.
Seterusnya, ubah suai logger
sebelumnya dan tambahkan winston
logger Sila rujuk kod untuk kaedah pengubahsuaian tertentu:
const winlogger = require("./winstonLogger"); winlogger.info("日志内容");
Laksanakan Selepas program, fail log yang sepadan boleh dijana dalam direktori akar logs/server.log
Anda juga boleh menukar tahap log, mengubah suai logger
dan hanya menggunakannya dalam mod console.error
winston
:
merekod maklumat ralat sambungan pangkalan data Maklumat di atas adalah untuk demonstrasi sahaja.
winston
membenarkan untuk menetapkan berbilang transport
, menukar fungsi winstonLogger.js
dalam createLogger
seperti berikut:
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ), transports: [ new transports.File({ filename: "logs/info.log", level: "info", format: format.combine( format.printf((i) => i.level === "info" ? `${i.level}: ${i.timestamp} ${i.message}` : "" ) ), }), new transports.File({ filename: "logs/error.log", level: "error", }), ], });
Laksanakan program sekali lagi, Anda akan melihat fail error.log
dan info.log
Memandangkan logger
tidak ditetapkan dalam info
, kandungan info.log
adalah kosong dan kandungan error.log
adalah sama seperti di atas.
winston
membenarkan berbilang logger
ditetapkan dalam projek sebenar, logger logger
boleh dibuat untuk setiap modul. Kod berikut mencipta rekod log pengguna dan perakam pengesahan log masuk:
const { createLogger, format, transports } = require("winston"); const customFormat = format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ); const globalLogger = createLogger({ format: customFormat, transports: [ new transports.File({ filename: "logs/info.log", level: "info", format: format.combine( format.printf((i) => i.level === "info" ? `${i.level}: ${i.timestamp} ${i.message}` : "" ) ), }), new transports.File({ filename: "logs/error.log", level: "error", }), ], }); const authLogger = createLogger({ transports: [ new transports.File({ filename: "logs/authLog.log", format: customFormat, }), ], }); module.exports = { globalLogger: globalLogger, authLogger: authLogger, };
Kod yang diubah suai mencipta perakam global globalLogger
dan perakam pengesahan authLogger
, pengubahsuaian yang sepadan logger.js
:
const { globalLogger } = require("./winstonLogger"); globalLogger.error(message);
Seperti yang dinyatakan dalam amalan terbaik yang diperkenalkan sebelum ini, fail log dibahagikan mengikut syarat tertentu, biasanya mengikut tarikh, saiz dan menetapkan bilangan hari untuk menyimpan log . Untuk mencapai keperluan ini, adalah perlu untuk memasang pustaka pergantungan berkaitan Winston.
npm install winston-daily-rotate-file --save
Selepas pemasangan selesai, gunakan kod berikut untuk mengemas kini fail winstonLogger.js
:
const { createLogger, format, transports } = require("winston"); require("winston-daily-rotate-file"); const customFormat = format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ); const defaultOptions = { format: customFormat, datePattern: "YYYY-MM-DD", zippedArchive: true, maxSize: "20m", maxFiles: "14d", }; const globalLogger = createLogger({ format: customFormat, transports: [ new transports.DailyRotateFile({ filename: "logs/info-%DATE%.log", level: "info", ...defaultOptions, }), new transports.DailyRotateFile({ filename: "logs/error-%DATE%.log", level: "error", ...defaultOptions, }), ], }); const authLogger = createLogger({ transports: [ new transports.DailyRotateFile({ filename: "logs/authLog-%DATE%.log", ...defaultOptions, }), ], }); module.exports = { globalLogger: globalLogger, authLogger: authLogger, };
Jalankan projek dan anda boleh melihat fail log:
Pada ketika ini, panduan penggunaan asas Winston telah diperkenalkan pada asasnya dapat memenuhi keperluan projek harian.
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !
Atas ialah kandungan terperinci Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!