# Logging और Observability — Agent Frameworks और MCP की बुनियाद

Source: https://www.geekswithgeeks.com/hi/agent-frameworks-mcp/ops-observability

> हर tool call को सुरक्षित रूप से log करें ताकि विफलताएँ trace हों और ख़र्च समझ आए।

## पढ़ने योग्य trace

हर call के लिए दर्ज करें: समय, tool का नाम, छिपाए गए arguments, अवधि, सफलता या error, और नतीजे का आकार। इनसे आप जवाब दे सकते हैं "agent ने ऐसा क्यों किया?" और "कौन-सा tool धीमा या विफल है?" Standard error या file में log करें, और लिखने से पहले secrets और व्यक्तिगत डेटा छिपा दें।

## Logging wrapper

Tool functions को wrap करें ताकि हर call का समय और log दर्ज हो। `redact` संवेदनशील मान हटाता है। Log standard error के logger में जाता है, stdio server पर stdout में कभी नहीं।

```python
import functools, logging, time
log = logging.getLogger("mcp.tools")

def logged(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        try:
            return fn(*args, **kwargs)
        finally:
            ms = (time.perf_counter() - start) * 1000
            log.info("tool=%s args=%s ms=%.0f", fn.__name__, redact(kwargs), ms)
    return wrapper
```

**Quiz:** Arguments को log करने से पहले क्या करना चाहिए?

- [ ] कुछ नहीं, सब कुछ log करें
- [x] Secrets और व्यक्तिगत डेटा छिपाएँ
- [ ] उनका हिंदी अनुवाद करें
- [ ] Server को encrypt करें

*Answer:* Secrets और व्यक्तिगत डेटा छिपाएँ. Logs व्यापक रूप से पढ़े जाते हैं और लंबे समय रहते हैं, इसलिए संवेदनशील मान उनमें नहीं लिखने चाहिए।
