लॉगटेप, जावास्क्रिप्ट और टाइपस्क्रिप्ट के लिए एक शून्य-निर्भरता संरचित लॉगिंग लाइब्रेरी, ने v0.6.0 जारी किया है। क्या बदल गया है?
लॉगटेप की विशेषताओं में से एक पदानुक्रमित श्रेणियों के माध्यम से सिंक की विरासत है। उदाहरण के लिए, यदि आप इस तरह दो लॉगर सेट करते हैं:
import { configure, getConsoleSink, getFileSink } from "@logtape/logtape"; await configure({ sinks: { console: getConsoleSink(), file: getFileSink("app.log"), }, loggers: [ { category: ["app"], level: "debug", sinks: ["file"] }, { category: ["app", "module"], level: "debug", sinks: ["console"] }, ], });
["ऐप"] लॉगर को लिखे गए लॉग केवल app.log फ़ाइल में सहेजे जाएंगे, लेकिन ["ऐप", "मॉड्यूल"] लॉगर को लिखे गए लॉग दोनों में सहेजे जाएंगे app.log फ़ाइल और कंसोल पर आउटपुट। ऐसा इसलिए है क्योंकि ["ऐप", "मॉड्यूल"] लकड़हारा अपनी मूल श्रेणी ["ऐप"] से सिंक प्राप्त करता है।
हालाँकि, कभी-कभी आप यह व्यवहार नहीं चाहेंगे। लॉगटेप 0.6.0 से शुरू करके, अब आप पैरेंट लॉगर के सिंक को ओवरराइड कर सकते हैं। उदाहरण के लिए, यदि आप चाइल्ड लॉगर के लिए पेरेंटसिंक्स: "ओवरराइड" विकल्प को इस तरह सक्षम करते हैं:
await configure({ sinks: { /* omitted; same as above */ }, loggers: [ { category: ["app"], level: "debug", sinks: ["file"] }, { category: ["app", "module"], level: "debug", sinks: ["console"], parentSinks: "override" }, ], });
["ऐप"] लॉगर को लिखे गए लॉग केवल app.log फ़ाइल में सहेजे जाएंगे, और ["ऐप", "मॉड्यूल"] लॉगर को लिखे गए लॉग केवल आउटपुट होंगे सांत्वना. ऐसा इसलिए है क्योंकि चाइल्ड लॉगर ["ऐप", "मॉड्यूल"] ने ["ऐप"] लॉगर के सिंक को ओवरराइड कर दिया है।
बेशक, डिफ़ॉल्ट मान पैरेंटसिंक है: "इनहेरिट", इसलिए यदि आप विकल्प निर्दिष्ट नहीं करते हैं, तो यह पहले की तरह व्यवहार करेगा।
यदि आप इस सुविधा को जोड़ने की पृष्ठभूमि के बारे में उत्सुक हैं, तो कृपया GitHub अंक #15 देखें।
पिछले संस्करणों में, यदि आपने इस तरह लॉग इन किया था:
logger.info("Hello, { name }!", { name: "Alice" });
अपेक्षाओं के विपरीत, हैलो, अपरिभाषित का एक लॉग! बनाया जाएगा. ऐसा इसलिए था क्योंकि प्लेसहोल्डर {नाम } में स्पेस वर्ण शामिल थे, इसलिए यह "नाम" के बजाय "नाम" संपत्ति की तलाश में था। दूसरे शब्दों में, आपको या तो प्लेसहोल्डर से रिक्त स्थान इस तरह हटाना होगा:
logger.info("Hello, {name}!", { name: "Alice" });
या वास्तविक संपत्ति के नाम में समान रिक्त स्थान इस तरह जोड़ें:
logger.info("Hello, { name }!", { " name ": "Alice" });
हालाँकि यह पूरी तरह से कोई बग नहीं था, यह व्यवहार था जिसमें कोडिंग आदतों के आधार पर गलतियाँ होने की संभावना थी।
हालाँकि, लॉगटेप 0.6.0 से शुरू करके, भले ही प्लेसहोल्डर की शुरुआत और अंत में रिक्त स्थान हों, यह रिक्त स्थान के बिना एक संपत्ति नाम की तलाश करेगा। उदाहरण के लिए, यदि आप इस तरह लॉग इन करते हैं:
logger.info("Hello, { name }!", { name: "Alice" });
जैसा कि अपेक्षित था, हैलो, ऐलिस! का एक लॉग! बनाया जाएगा।
हालाँकि, यदि कोई ऐसी संपत्ति है जो स्पेस वर्णों सहित बिल्कुल मेल खाती है, तो उसे प्राथमिकता दी जाएगी। उदाहरण के लिए, यदि आप इस तरह लॉग इन करते हैं:
logger.info("Hello, { name }!", { name: "Alice", " name ": "Bob" });
हैलो, बॉब! हैलो, ऐलिस! के बजाय लॉग किया जाएगा।
यदि आप इस सुविधा को जोड़ने की पृष्ठभूमि के बारे में उत्सुक हैं, तो कृपया GitHub अंक #16 देखें।
LogRecord एक डेटा प्रकार है जो आउटपुट से पहले लॉग का प्रतिनिधित्व करता है और लॉगटेप द्वारा स्वरूपित किया जाता है।
जबकि LogRecord.message प्रॉपर्टी पहले से मौजूद थी, इस प्रॉपर्टी में संदेश टेम्पलेट में प्लेसहोल्डर्स को वास्तविक प्रॉपर्टी मानों से बदलने के बाद परिणाम शामिल था। अधिकांश मामलों में यह पर्याप्त था, लेकिन जब लॉग आउटपुट डेस्टिनेशन (सिंक) एक अन्य लॉगिंग सिस्टम है, तो आप मूल संदेश टेम्पलेट और प्रॉपर्टी मानों को अलग-अलग आउटपुट करना चाह सकते हैं, जिससे प्राप्त लॉगिंग सिस्टम को संदेश टेम्पलेट में प्लेसहोल्डर्स को प्रॉपर्टी के साथ बदलने की अनुमति मिलती है। सीधे मान.
LogTape 0.6.0 में जोड़ा गया LogRecord.rawMessage बिल्कुल इसी उद्देश्य के लिए एक संपत्ति है, जिसमें बिना प्रतिस्थापित प्लेसहोल्डर के संदेश टेम्पलेट की मूल स्थिति शामिल है। उदाहरण के लिए, यदि आप इस तरह लॉग इन करते हैं:
logger.info("Hello, {name}!", { name: "Alice" });
जबकि LogRecord.message में मान होगा ["Hello, ", "Alice", "!"], LogRecord.rawMessage में मान होगा "Hello, {name}!".
यदि आप इस सुविधा को जोड़ने की पृष्ठभूमि के बारे में उत्सुक हैं, तो कृपया GitHub अंक #17 देखें।
टेक्स्ट फ़ॉर्मेटर एक इंटरफ़ेस है जो यह निर्धारित करता है कि स्ट्रीम सिंक, फ़ाइल सिंक आदि में प्रत्येक लॉग को टेक्स्ट में कैसे स्वरूपित किया जाएगा। वास्तविक प्रकार की परिभाषा काफी सरल है:
export type TextFormatter = (record: LogRecord) => string;
हालाँकि, हर बार सीधे टेक्स्ट फ़ॉर्मेटर को परिभाषित करना बोझिल हो सकता है, इसलिए लॉगटेप में अंतर्निहित defaultTextFormatter और ansiColorFormatter हैं जिनका आप उपयोग कर सकते हैं। अब तक, क्योंकि कोई अतिरिक्त कॉन्फ़िगरेशन संभव नहीं था, आपको पूर्व निर्धारित प्रारूप को वैसे ही स्वीकार करना पड़ता था। उदाहरण के लिए, यदि आपको यह पसंद नहीं आया कि "चेतावनी" जैसे लॉग स्तर डब्लूआरएन जैसे तीन-अक्षर संक्षिप्ताक्षरों के रूप में आउटपुट थे, तो आपको टेक्स्टफॉर्मेटर को स्क्रैच से लागू करना होगा।
हालाँकि, लॉगटेप 0.6.0 से शुरू करके, आप टेक्स्टफ़ॉर्मेटर को बिल्कुल शुरू से लागू किए बिना getDefaultTextFormatter() और getAnsiColorFormatter() फ़ंक्शंस के माध्यम से अपनी पसंद के अनुसार विभिन्न स्वरूपण सेटिंग्स को अनुकूलित कर सकते हैं।
उदाहरण के लिए, यदि आप "चेतावनी" जैसे लॉग स्तरों को एक बड़े अक्षर W के रूप में प्रस्तुत करना चाहते हैं, तो आप इसे इस तरह कॉन्फ़िगर कर सकते हैं:
const myFormatter = getDefaultTextFormatter({ level: "L" });
या यदि आप टाइमस्टैम्प से दिनांक और समयक्षेत्र को हटाना चाहते हैं और केवल समय दिखाना चाहते हैं, तो आप इसे इस तरह कॉन्फ़िगर कर सकते हैं:
const myFormatter = getDefaultTextFormatter({ timestamp: "time" });
अधिक स्वरूपण विकल्पों के विवरण के लिए, कृपया संबंधित दस्तावेज़ देखें।
यदि आप इस सुविधा को जोड़ने की पृष्ठभूमि के बारे में उत्सुक हैं, तो कृपया GitHub अंक #13 देखें।
लॉगटेप 0.6.0 पहले से ही जेएसआर और एनपीएम पर उपलब्ध है, इसलिए इसे अभी प्राप्त करें!
deno add @logtape/[email protected] # Deno npm add @logtape/[email protected] # npm pnpm add @logtape/[email protected] # pnpm yarn add @logtape/[email protected] # Yarn bun add @logtape/[email protected] # Bun
हैप्पी लॉगिंग!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3