Rumah > hujung hadapan web > tutorial js > Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

青灯夜游
Lepaskan: 2021-10-20 10:01:21
ke hadapan
1762 orang telah melayarinya

Artikel ini akan memperkenalkan kepada anda cara menggunakan perpustakaan Winston untuk membina fungsi pengelogan mudah dalam Node.js Saya harap ia akan membantu anda!

Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

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:

  • Kawalan berpusat pembalakan dan masa : Tukar kod di satu tempat
  • Kawal tempat log dihantar : Simpan log ke berbilang destinasi secara serentak (seperti Elasticsearch, MongoDB, Postgres, dll.).
  • Format log tersuai : dengan awalan seperti cap masa, tahap log warna, format JSON, dsb.

amalan winston

Kod amalan akan menambah fungsi pengelogan dalam projek perkhidmatan berpura-pura, pasang kebergantungan:

npm install winston --save
Salin selepas log masuk

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}`
                )
            ),
        }),
    ],
});
Salin selepas log masuk

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("日志内容");
Salin selepas log masuk

Laksanakan Selepas program, fail log yang sepadan boleh dijana dalam direktori akar logs/server.log

Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

Anda juga boleh menukar tahap log, mengubah suai logger dan hanya menggunakannya dalam mod console.error winston:

Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

merekod maklumat ralat sambungan pangkalan data Maklumat di atas adalah untuk demonstrasi sahaja.

Berbilang pengangkutan

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",
        }),
    ],
});
Salin selepas log masuk

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.

Pembalak berbilang

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,
};
Salin selepas log masuk

Kod yang diubah suai mencipta perakam global globalLogger dan perakam pengesahan authLogger, pengubahsuaian yang sepadan logger.js:

const { globalLogger } = require("./winstonLogger");
globalLogger.error(message);
Salin selepas log masuk

Log rolling harian fail

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
Salin selepas log masuk

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,
};
Salin selepas log masuk

Jalankan projek dan anda boleh melihat fail log:

Analisis ringkas tentang cara perpustakaan Winston Node.js membina fungsi pengelogan mudah

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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan