cari
Rumahhujung hadapan webtutorial jsMemperkenalkan konteks tersirat dalam LogTape .0

Introducing implicit contexts in LogTape .0

Saya teruja untuk mengumumkan keluaran LogTape 0.7.0, yang memperkenalkan konteks tersirat—ciri baharu yang berkuasa yang menjadikannya lebih mudah berbanding sebelum ini untuk menambah maklumat kontekstual pada log anda di seluruh anda keseluruhan aplikasi.

Apakah konteks tersirat?

Bayangkan anda mengendalikan permintaan HTTP dalam aplikasi anda. Anda mahu setiap mesej log yang dijana semasa pemprosesan permintaan menyertakan ID permintaan, tidak kira di mana dalam pangkalan kod anda log dibuat. Sebelum konteks tersirat, anda perlu:

  1. Haruskan ID permintaan melalui setiap panggilan fungsi
  2. Buat pembalak baharu dengan konteks untuk setiap modul
  3. Atau gunakan pembolehubah global (yang mempunyai masalah mereka sendiri)

Dengan konteks tersirat, anda kini boleh menetapkan konteks pada permulaan pengendali permintaan anda dan setiap mesej log dalam konteks pelaksanaan itu akan menyertakan maklumat tersebut secara automatik. Berikut ialah contoh mudah:

function handleRequest(requestId: string) {
  withContext({ requestId }, () => {
    // Any log message in this function or any function it calls
    // will automatically include the requestId
    processRequest();
  });
}

function processRequest() {
  // Note that we don't need to pass the requestId explicitly
  getLogger("processor").info(
    "Processing request: {requestId}"
  );
}

Bagaimana ia berfungsi?

Konteks tersirat menggunakan mekanisme storan konteks-tempatan masa jalan yang mendasari (seperti AsyncLocalStorage Node.js) untuk mengekalkan maklumat kontekstual sepanjang pelaksanaan kod anda. Ini bermakna konteks diselenggara dengan betul walaupun merentasi operasi tak segerak.

Untuk mendayakan konteks tersirat dalam aplikasi anda, anda perlu mengkonfigurasi LogTape dengan storan konteks setempat:

import { AsyncLocalStorage } from "node:async_hooks";
import { configure } from "@logtape/logtape";

await configure({
  // ... other settings ...
  contextLocalStorage: new AsyncLocalStorage(),
});

Konteks dan keutamaan bersarang

Salah satu ciri hebat konteks tersirat ialah ia boleh bersarang. Apabila anda menyusun konteks, konteks dalaman mewarisi dan boleh mengatasi nilai daripada konteks luar:

function handleRequest(requestId: string) {
  withContext({ requestId, stage: "request" }, () => {
    // stage is "request" here
    processUser(1234);
  });
}

function processUser(userId: number) {
  withContext({ userId, stage: "user" }, () => {
    // stage is "user" here, but requestId is still available
    getLogger("processor").info(
      "Processing user: {userId} for request: {requestId}"
    );
  });
}

Apabila ia datang untuk menyelesaikan nilai konteks, LogTape mengikut urutan keutamaan yang jelas:

  1. Sifat eksplisit dalam mesej log mengambil keutamaan tertinggi
  2. Set konteks eksplisit melalui Logger.with() mengambil keutamaan kedua
  3. Set konteks tersirat melalui withContext() mengambil keutamaan paling rendah

Sokongan masa jalan

Sehingga Oktober 2024, konteks tersirat disokong dalam:

  • Node.js
  • Deno
  • Bun

Pelayar web belum lagi menyokong konteks tersirat, kerana mereka menunggu pelaksanaan cadangan Konteks Async TC39.

Kes guna

Konteks tersirat amat berharga untuk:

  1. Penjejakan Permintaan: Tambahkan ID permintaan, ID pengguna atau ID sesi pada semua log dalam permintaan
  2. Pemantauan Transaksi: Jejaki ID transaksi merentas berbilang operasi
  3. Konteks Ralat: Pastikan log ralat sentiasa mempunyai maklumat kontekstual yang berkaitan
  4. Pemantauan Prestasi: Tambahkan maklumat masa merentas berbilang operasi
  5. Konteks Penyewa: Dalam aplikasi berbilang penyewa, jejak maklumat penyewa merentas semua operasi

Amalan terbaik

Apabila menggunakan konteks tersirat, pertimbangkan amalan terbaik ini:

  1. Gunakan konteks tersirat untuk maklumat yang benar-benar dimiliki oleh keseluruhan konteks pelaksanaan
  2. Pastikan data konteks ringan—ingat ia dibawa sepanjang keseluruhan pelaksanaan
  3. Gunakan nama kunci yang bermakna dan konsisten merentas aplikasi anda
  4. Pertimbangkan untuk menggunakan TypeScript untuk memastikan ketekalan struktur konteks
  5. Dokumenkan struktur konteks yang dijangkakan untuk aplikasi anda

Panduan Migrasi

Jika anda sudah menggunakan LogTape, peningkatan untuk menggunakan konteks tersirat adalah mudah:

  1. Kemas kini kepada LogTape 0.7.0
  2. Tambahkan storan konteks-tempatan pada konfigurasi LogTape anda
  3. Kenal pasti tempat yang konteks diedarkan secara manual
  4. Ganti dengan panggilan withContext() pada sempadan yang sesuai

Kesimpulan

Konteks tersirat dalam LogTape 0.7.0 menyediakan cara yang berkesan untuk menambah maklumat kontekstual pada log anda tanpa mengacaukan kod anda atau menghantar konteks secara manual melalui timbunan panggilan anda. Ia amat berharga dalam perkhidmatan web, API dan aplikasi lain yang menjejaki konteks merentas operasi adalah penting.

Saya teruja untuk melihat cara anda akan menggunakan ciri ini untuk meningkatkan pengelogan dan kebolehmerhatian aplikasi anda. Cubalah dan beritahu saya pendapat anda!

Untuk mendapatkan maklumat lanjut, lihat dokumentasi lengkap tentang konteks tersirat.

Atas ialah kandungan terperinci Memperkenalkan konteks tersirat dalam LogTape .0. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Memahami Enjin JavaScript: Butiran PelaksanaanMemahami Enjin JavaScript: Butiran PelaksanaanApr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanPython vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanApr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python vs JavaScript: Komuniti, Perpustakaan, dan SumberPython vs JavaScript: Komuniti, Perpustakaan, dan SumberApr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsiDari C/C ke JavaScript: Bagaimana semuanya berfungsiApr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual