Basics

लॉगिंग

परिचय

Nylo Website v7 एक व्यापक लॉगिंग सिस्टम प्रदान करता है।

लॉग्स केवल तभी प्रिंट होते हैं जब आपकी .env फ़ाइल में APP_DEBUG=true हो, जिससे प्रोडक्शन ऐप्स साफ़ रहते हैं।

import 'package:nylo_framework/nylo_framework.dart';

// Basic logging
printInfo("Hello World");
printDebug("Debug message");
printError("Error occurred");

लॉग लेवल्स

Nylo Website v7 रंगीन आउटपुट के साथ कई लॉग लेवल्स को सपोर्ट करता है:

लेवल मेथड रंग उपयोग
Debug printDebug() Cyan विस्तृत डीबगिंग जानकारी
Info printInfo() Blue सामान्य जानकारी
Error printError() Red एरर्स और एक्सेप्शन्स
printDebug("Fetching user ID: 123");
printInfo("App initialized");
printError("Network request failed");

आउटपुट उदाहरण:

[2025-01-27 10:30:45] [debug] Fetching user ID: 123
[2025-01-27 10:30:45] [info] App initialized
[2025-01-27 10:30:46] [error] Network request failed

लॉग मेथड्स

बेसिक लॉगिंग

// Class methods
printInfo("Information message");
printDebug("Debug message");
printError("Error message");
printJson({"key": "value"});

स्टैक ट्रेस के साथ एरर

बेहतर डीबगिंग के लिए स्टैक ट्रेस के साथ एरर्स लॉग करें:

try {
  await someOperation();
} catch (e, stackTrace) {
  printError(e, stackTrace: stackTrace);
}

डीबग मोड की परवाह किए बिना फ़ोर्स प्रिंट

APP_DEBUG=false होने पर भी प्रिंट करने के लिए alwaysPrint: true का उपयोग करें:

printInfo("Critical info", alwaysPrint: true);
printError("Critical error", alwaysPrint: true);

अगला लॉग दिखाएँ (एक बार का ओवरराइड)

APP_DEBUG=false होने पर एक बार लॉग प्रिंट करें:

// .env: APP_DEBUG=false

printInfo("This won't print");

showNextLog();
printInfo("This will print"); // Prints once

printInfo("This won't print again");

JSON लॉगिंग

Nylo Website v7 में एक समर्पित JSON लॉगिंग मेथड शामिल है:

Map<String, dynamic> userData = {
  "id": 123,
  "name": "Anthony",
  "email": "anthony@example.com"
};

// Compact JSON
printJson(userData);
// {"id":123,"name":"Anthony","email":"anthony@example.com"}

// Pretty printed JSON
printJson(userData, prettyPrint: true);
// {
//   "id": 123,
//   "name": "Anthony",
//   "email": "anthony@example.com"
// }

रंगीन आउटपुट

Nylo Website v7 डीबग मोड में लॉग आउटपुट के लिए ANSI रंगों का उपयोग करता है। प्रत्येक लॉग लेवल में आसान पहचान के लिए एक विशिष्ट रंग होता है।

रंग अक्षम करें

// Disable colored output globally
NyLogger.useColors = false;

रंग स्वचालित रूप से अक्षम हो जाते हैं:

  • रिलीज़ मोड में
  • जब टर्मिनल ANSI एस्केप कोड्स को सपोर्ट नहीं करता

लॉग लिसनर्स

Nylo Website v7 आपको रियल-टाइम में सभी लॉग एंट्रीज़ सुनने की अनुमति देता है:

// Set up a log listener
NyLogger.onLog = (NyLogEntry entry) {
  print("Log: [${entry.type}] ${entry.message}");

  // Send to crash reporting service
  if (entry.type == 'error') {
    CrashReporter.log(entry.message, stackTrace: entry.stackTrace);
  }
};

NyLogEntry प्रॉपर्टीज़

NyLogger.onLog = (NyLogEntry entry) {
  entry.message;    // The log message
  entry.type;       // Log level (debug, info, warning, error, success, verbose)
  entry.dateTime;   // When the log was created
  entry.stackTrace; // Stack trace (for errors)
};

उपयोग के मामले

  • क्रैश रिपोर्टिंग सर्विसेज़ (Sentry, Firebase Crashlytics) को एरर भेजें
  • कस्टम लॉग व्यूअर बनाएँ
  • डीबगिंग के लिए लॉग्स स्टोर करें
  • रियल-टाइम में ऐप व्यवहार मॉनिटर करें
// Example: Send errors to Sentry
NyLogger.onLog = (entry) {
  if (entry.type == 'error') {
    Sentry.captureMessage(
      entry.message,
      level: SentryLevel.error,
    );
  }
};

हेल्पर एक्सटेंशन्स

Nylo Website लॉगिंग के लिए सुविधाजनक एक्सटेंशन मेथड्स प्रदान करता है:

dump()

कंसोल पर कोई भी वैल्यू प्रिंट करें:

String project = 'Nylo';
project.dump(); // 'Nylo'

List<String> seasons = ['Spring', 'Summer', 'Fall', 'Winter'];
seasons.dump(); // ['Spring', 'Summer', 'Fall', 'Winter']

int age = 25;
age.dump(); // 25

// Function syntax
dump("Hello World");

dd() - डंप और डाई

वैल्यू प्रिंट करें और तुरंत बाहर निकलें (डीबगिंग के लिए उपयोगी):

String code = 'Dart';
code.dd(); // Prints 'Dart' and stops execution

// Function syntax
dd("Debug point reached");

कॉन्फ़िगरेशन

एनवायरनमेंट वेरिएबल्स

अपनी .env फ़ाइल में लॉगिंग व्यवहार नियंत्रित करें:

# Enable/disable all logging
APP_DEBUG=true

लॉग्स में DateTime

Nylo Website लॉग आउटपुट में टाइमस्टैम्प शामिल कर सकता है। इसे अपने Nylo सेटअप में कॉन्फ़िगर करें:

// In your boot provider
Nylo.instance.showDateTimeInLogs(true);

टाइमस्टैम्प के साथ आउटपुट:

[2025-01-27 10:30:45] [info] User logged in

टाइमस्टैम्प के बिना आउटपुट:

[info] User logged in

सर्वोत्तम प्रथाएँ

  1. उचित लॉग लेवल्स का उपयोग करें - सब कुछ एरर के रूप में लॉग न करें
  2. प्रोडक्शन में वर्बोज़ लॉग्स हटाएँ - प्रोडक्शन में APP_DEBUG=false रखें
  3. संदर्भ शामिल करें - डीबगिंग के लिए प्रासंगिक डेटा लॉग करें
  4. स्ट्रक्चर्ड लॉगिंग का उपयोग करें - कॉम्प्लेक्स डेटा के लिए NyLogger.json()
  5. एरर मॉनिटरिंग सेटअप करें - एरर्स पकड़ने के लिए NyLogger.onLog का उपयोग करें
// Good logging practice
NyLogger.info("User ${user.id} logged in from ${device.platform}");
NyLogger.error("API request failed", stackTrace: stackTrace, alwaysPrint: true);
NyLogger.json(response.data, prettyPrint: true);