Jadual Kandungan
1. Prinsip dan Amalan
Saya melakukan ujian tekanan secara tempatan, Ini ialah perbandingan penggunaan memori:
Rumah hujung hadapan web tutorial js Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan elegan

Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan elegan

Mar 07, 2022 pm 08:05 PM
node

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!

Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan elegan

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

Berikut ialah contoh cara saya menggunakan cls-hooked dalam projek saya:

/session.js Cipta ruang storan bernama

/logger.js Log Cetak

const createNamespace = require('cls-hooked').createNamespace 
const session = createNamespace('requestId-store') 
module.exports = session
Salin selepas log masuk
/sequelize.js sql panggilan logger untuk mencetak log

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) 
} 
}
Salin selepas log masuk
/app.js Tetapkan requestId, tetapkan requestId untuk mengembalikan pengepala respons, cetak log akses

const logger = require("./logger") 
new Sequelize( 
logging: function (sql, costtime) { 
logger.error( `sql exe : ${sql} | costtime ${costtime} ms` ); 
} )
Salin selepas log masuk
Mari kita lihat log apabila laluan permintaan ialah /home?a=1:

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)
}) }
Salin selepas log masuk
Anda boleh melihat bahawa requestId dalam log permintaan yang sama untuk keseluruhan pautan adalah sama. Jika terdapat penggera kemudian dihantar ke platform penggera, maka kami boleh mencari keseluruhan pautan yang dilaksanakan oleh permintaan ini berdasarkan requestId.

Pelajar yang berhati-hati mungkin menyedari bahawa saya juga menetapkan requestId dalam pengepala respons yang dikembalikan oleh antara muka Tujuannya adalah untuk mengetahui requestId terus daripada penyemak imbas jika permintaan didapati bertindak balas dengan perlahan atau menghadapi masalah boleh buat analisis.
访问日志:
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
Salin selepas log masuk

2. Overhed prestasi

Saya melakukan ujian tekanan secara tempatan, Ini ialah perbandingan penggunaan memori:

Kira-kira 10% lebih daripada tidak menggunakan async_hook.

Ajar anda langkah demi langkah cara mencetak log pautan penuh dalam nod dengan eleganUntuk 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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Mar 28, 2023 pm 07:28 PM

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!

Bagaimana untuk memadam nod dalam nvm Bagaimana untuk memadam nod dalam nvm Dec 29, 2022 am 10:07 AM

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".

Bagaimana untuk melakukan pencerminan Docker perkhidmatan Node? Penjelasan terperinci tentang pengoptimuman melampau Bagaimana untuk melakukan pencerminan Docker perkhidmatan Node? Penjelasan terperinci tentang pengoptimuman melampau Oct 19, 2022 pm 07:38 PM

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.

Analisis mendalam tentang alat pengurusan proses Node 'pm2' Analisis mendalam tentang alat pengurusan proses Node 'pm2' Apr 03, 2023 pm 06:02 PM

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!

PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? Mar 05, 2025 pm 05:57 PM

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

Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Dec 02, 2022 pm 09:06 PM

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!

Apa yang perlu dilakukan jika npm nod gyp gagal Apa yang perlu dilakukan jika npm nod gyp gagal Dec 29, 2022 pm 02:42 PM

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 berasaskan token dengan Angular dan Node Pengesahan berasaskan token dengan Angular dan Node Sep 01, 2023 pm 02:01 PM

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

See all articles