


Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan elegan
Bagaimanakah nod mencetak log pautan penuh dengan elegan? Artikel berikut akan memperkenalkan kepada anda cara mencetak log pautan penuh dengan elegan dalam nod Saya harap ia akan membantu anda!
Apabila pengguna melaporkan masalah: Apabila ralat berlaku apabila menggunakan fungsi dalam talian tertentu, bagaimanakah kita boleh mengesannya dengan cepat dan tepat? Bagaimana untuk mengesan pengoptimuman dengan berkesan apabila antara muka permintaan tertentu mengembalikan data dengan perlahan?
1. Prinsip dan Amalan
Seperti yang kita semua tahu, apabila permintaan datang, log berikut mungkin akan dihasilkan:
1 : Log akses pengguna
2. Pengecualian: Log pengecualian kod
3. SQL: log pertanyaan sql
4 >Bagaimana untuk menjejaki Semua log yang dihasilkan oleh satu permintaan?
Pendekatan umum ialah menggunakan requestId sebagai pengecam unik,
dan kemudian tulis middleware untuk menyuntik requestId ke dalam konteks Apabila pengelogan diperlukan, keluarkannya daripada konteks dan cetak.
Dalam perkhidmatan pihak ketiga dan log SQL, requestId juga perlu dihantar ke dalam fungsi yang sepadan untuk mencetak Pemindahan lapisan demi lapisan ini benar-benar terlalu menyusahkan dan kodnya agak mengganggu.
Matlamat kami adalah untuk mengurangkan gangguan kod, menyuntiknya sekali dan menjejakinya secara automatik.
Selepas penyelidikan, async_hooks boleh menjejaki kitaran hayat kelakuan tak segerak Dalam setiap sumber tak segerak (setiap permintaan ialah sumber tak segerak), ia mempunyai 2 ID, masing-masing asyncId (ID kitaran hayat semasa. sumber tak segerak), trigerAsyncId (ID sumber tak segerak induk).
async_hooks menyediakan cangkuk kitaran hayat berikut untuk memantau sumber tak segerak:
Jika kami membuat pemetaan, setiap asyncId memetakan ke storan dan requestId yang sepadan disimpan dalam storan, maka requestId boleh diperolehi dengan mudah. Kebetulan perpustakaan cls-hooked telah dikapsulkan berdasarkan async_hooks Ia mengekalkan salinan data dalam sumber tak segerak yang sama dan menyimpannya dalam bentuk pasangan nilai kunci. (Nota: async_hooked perlu digunakan dalam nod versi yang lebih tinggi>=8.2.1) Sudah tentu, terdapat pelaksanaan lain dalam komuniti, seperti cls-session, node-continuation-local-storage, dsb.asyncHook = async_hook.createHook({ // 监听异步资源的创建 init(asyncId,type,triggerAsyncId,resource){}, // 异步资源回调函数开始执行之前 before(asyncId){}, // 异步资源回调函数开始执行后 after(asyncId){}, // 监听异步资源的销毁 destroy(asyncId){} })
Berikut ialah contoh cara saya menggunakan cls-hooked dalam projek saya:
/session.js Cipta ruang storan bernama
/logger.js Log Cetakconst createNamespace = require('cls-hooked').createNamespace const session = createNamespace('requestId-store') module.exports = session
const session = require('./session') module.exports = { info: (message) => { const requestId = session.get('requestId') console.log(`requestId:${requestId}`, message) }, error: (message) => { const requestId = session.get('requestId') console.error(`requestId:${requestId}`, message) } }
const logger = require("./logger") new Sequelize( logging: function (sql, costtime) { logger.error( `sql exe : ${sql} | costtime ${costtime} ms` ); } )
const session = require('./session') const logger = require('./logger') async function accessHandler(ctx, next) { const requestId = ctx.header['x-request-id'] || uuid() const params = ctx.request.body ? JSON.stringify(ctx.request.body) : JSON.stringify(ctx.request.query) // 设置requestId session.run(() => { session.set('requestId', requestId) logger.info(`url:${ctx.request.path};params:${params}`) next() // 设置返回响应头 ctx.res.setHeader('X-Request-Id',requestId) }) }
访问日志: requestId:79f422a6-6151-4bfd-93ca-3c6f892fb9ac url:/home;params:{"a":"1"} Sql日志: requestId:79f422a6-6151-4bfd-93ca-3c6f892fb9ac sql exe : Executed (default): SELECT `id` FROM t_user
Saya melakukan ujian tekanan secara tempatan, Ini ialah perbandingan penggunaan memori:
Kira-kira 10% lebih daripada tidak menggunakan async_hook.Untuk sistem 100 peringkat QPS kami, tidak mengapa, tetapi jika ia adalah perkhidmatan konkurensi tinggi, kami mungkin perlu mempertimbangkannya dengan teliti.
ps: Jika terdapat sebarang ralat, sila nyatakan, jangan komen jika anda tidak menyukainya
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:
nodejs tutorial!
Atas ialah kandungan terperinci Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan elegan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Cara memadam nod dengan nvm: 1. Muat turun "nvm-setup.zip" dan pasangkannya pada pemacu C 2. Konfigurasikan pembolehubah persekitaran dan semak nombor versi melalui arahan "nvm -v" 3. Gunakan "nvm arahan install" Pasang nod; 4. Padamkan nod yang dipasang melalui arahan "nvm uninstall".

Dalam tempoh ini, saya sedang membangunkan perkhidmatan dinamik HTML yang biasa kepada semua kategori dokumen Tencent Untuk memudahkan penjanaan dan penggunaan akses kepada pelbagai kategori, dan untuk mematuhi trend beralih ke awan, saya sedang mempertimbangkan. menggunakan Docker untuk membetulkan kandungan perkhidmatan dan mengurus versi produk secara seragam. Artikel ini akan berkongsi pengalaman pengoptimuman yang saya kumpulkan dalam proses perkhidmatan Docker untuk rujukan anda.

Artikel ini akan berkongsi dengan anda alat pengurusan proses Node "pm2", dan bercakap tentang mengapa pm2 diperlukan, cara memasang dan menggunakan pm2, saya harap ia akan membantu semua orang!

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Bagaimana untuk membungkus fail boleh laku nodejs dengan pkg? Artikel berikut akan memperkenalkan kepada anda cara menggunakan pkg untuk membungkus projek Node ke dalam fail boleh laku. Saya harap ia akan membantu anda!

npm node gyp gagal kerana versi "node-gyp.js" dan "Node.js" tidak sepadan Penyelesaiannya: 1. Kosongkan cache nod melalui "npm cache clean -f" 2. Melalui "npm install -. g n" Pasang modul n; 3. Pasang versi "nod v12.21.0" melalui arahan "n v12.21.0".

Pengesahan adalah salah satu bahagian terpenting dalam mana-mana aplikasi web. Tutorial ini membincangkan sistem pengesahan berasaskan token dan cara ia berbeza daripada sistem log masuk tradisional. Pada penghujung tutorial ini, anda akan melihat demo berfungsi sepenuhnya yang ditulis dalam Angular dan Node.js. Sistem Pengesahan Tradisional Sebelum beralih kepada sistem pengesahan berasaskan token, mari kita lihat sistem pengesahan tradisional. Pengguna memberikan nama pengguna dan kata laluan mereka dalam borang log masuk dan klik Log Masuk. Selepas membuat permintaan, sahkan pengguna di bahagian belakang dengan menanyakan pangkalan data. Jika permintaan itu sah, sesi dibuat menggunakan maklumat pengguna yang diperoleh daripada pangkalan data dan maklumat sesi dikembalikan dalam pengepala respons supaya ID sesi disimpan dalam penyemak imbas. Menyediakan akses kepada aplikasi tertakluk kepada
