# Sync Operations Without Logging

LLMS index: [llms.txt](/llms.txt)

---

<div id="pslens-context-panel" class="card border-info mb-4 d-none">
  <div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle">
    <i class="bi bi-info-circle-fill me-2"></i>
    <span>Tailored Operational Context</span>
  </div>
  <div class="card-body p-0">
    <ul class="list-group list-group-flush">
      <li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Target Database:</strong>
        <span id="ctx-db" class="badge bg-secondary font-monospace">&mdash;</span>
      </li>
      <li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Context Type:</strong>
        <span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase">&mdash;</span>
      </li>
      <li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Alert Severity:</strong>
        <span id="ctx-severity" class="badge">&mdash;</span>
      </li>
      <li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Triggered Time:</strong>
        <span id="ctx-time" class="text-muted small">&mdash;</span>
      </li>
      <li id="row-details" class="list-group-item py-2 d-none">
        <strong id="label-details" class="d-block mb-1">Firing Context:</strong>
        <code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;">&mdash;</code>
      </li>
    </ul>
  </div>
</div>

<script>
  (function() {
    const params = new URLSearchParams(window.location.search);
    const metadata = params.get('metadata');
    if (!metadata) return;

    try {
      
      const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
      const jsonStr = decodeURIComponent(escape(window.atob(base64)));
      const data = JSON.parse(jsonStr);

      if (data) {
        let hasData = false;

        if (data.db) {
          document.getElementById('ctx-db').textContent = data.db;
          document.getElementById('row-db').classList.remove('d-none');
          hasData = true;
        }

        if (data.type) {
          document.getElementById('ctx-type').textContent = data.type;
          document.getElementById('row-type').classList.remove('d-none');
          hasData = true;
        }

        if (data.severity) {
          const severityBadge = document.getElementById('ctx-severity');
          const severity = data.severity.toLowerCase();
          severityBadge.textContent = severity.toUpperCase();
          if (severity === 'critical') {
            severityBadge.className = 'badge bg-danger';
          } else if (severity === 'warning') {
            severityBadge.className = 'badge bg-warning text-dark';
          } else {
            severityBadge.className = 'badge bg-info';
          }
          document.getElementById('row-severity').classList.remove('d-none');
          hasData = true;
        }

        if (data.t) {
          const date = new Date(data.t * 1000);
          document.getElementById('ctx-time').textContent = date.toLocaleString();
          document.getElementById('row-time').classList.remove('d-none');
          hasData = true;
        }

        if (data.details) {
          document.getElementById('ctx-details').textContent = data.details;

          
          const labelDetails = document.getElementById('label-details');
          if (data.type === 'object') {
            labelDetails.textContent = 'Object Metadata Details:';
          } else if (data.type === 'report') {
            labelDetails.textContent = 'Report Description:';
          } else {
            labelDetails.textContent = 'Firing Context:';
          }

          document.getElementById('row-details').classList.remove('d-none');
          hasData = true;
        }

        if (hasData) {
          document.getElementById('pslens-context-panel').classList.remove('d-none');
        }
      }
    } catch (e) {
      console.error('Failed to parse operational context metadata:', e);
    }
  })();
</script>


## Sync Operations Without Logging

**Report ID:** `ib-sync-no-logging`
**Category:** Integration Broker

## Purpose

This report identifies active synchronous service operations that have active routings where message detail logging is disabled. When logging is off on a sync routing, transaction data is not recorded in the IB logs, making it impossible to troubleshoot failures or audit message traffic.

## What It Detects

A routing is flagged when all three conditions are met:

1. The service operation is **synchronous** (`RTNGTYPE = 'S'` in PSOPERATION)
2. It has at least one active version (`ACTIVE_FLAG = 'A'` in PSOPRVERDFN)
3. An active routing (`EFF_STATUS = 'A'` in PSIBRTNGDEFN) has logging disabled (`LOGMSGDTLFLG = '2'`)

## Tables Queried

### PSOPERATION — Service Operation Definitions

Paginated to discover all operations, filtered to synchronous only.

|      Field       |         Description          |           Filter            |
| ---------------- | ---------------------------- | --------------------------- |
| IB_OPERATIONNAME | Operation name (primary key) |                             |
| IB_SERVICENAME   | Parent service name          |                             |
| RTNGTYPE         | Routing type                 | Must be `'S'` (Synchronous) |
| DESCR            | Short description            |                             |

### PSOPRVERDFN — Operation Version Definitions

|    Field    |        Description        |           Filter           |
| ----------- | ------------------------- | -------------------------- |
| VERSIONNAME | Version name (e.g., "v1") |                            |
| ACTIVE_FLAG | Version active status     | At least one must be `'A'` |

### PSIBRTNGDEFN — Integration Broker Routing Definitions

|      Field       |                                 Description                                 |             Filter              |
| ---------------- | --------------------------------------------------------------------------- | ------------------------------- |
| ROUTINGDEFNNAME  | Routing definition name                                                     |                                 |
| EFF_STATUS       | Effective status                                                            | Must be `'A'` (Active)          |
| SENDERNODENAME   | Sender node                                                                 |                                 |
| RECEIVERNODENAME | Receiver node                                                               |                                 |
| LOGMSGDTLFLG     | Message detail logging flag (`0`=Header, `1`=Header+Detail, `2`=No Logging) | Flagged when `'2'` (No Logging) |

## Data Flow

```text
1. Paginate through all PSOPERATION records
   (batches of 300)
        |
        v
2. For each operation, fetch full details
   (versions, routings)
        |
        v
3. Filter to synchronous operations with at
   least one active version
        |
        v
4. Check each active routing for LOGMSGDTLFLG
   Flag routings where value is '2' (No Logging)
        |
        v
5. Generate table of flagged routings
```

## Report Output

The generated report contains:

- **Summary** with total operations, active sync operations, sync with active routings, and count of routings without logging
- **Flagged routings table** with operation name (linked to detail page), service, routing name, sender node, receiver node, and description
- **Recommendations** for enabling logging

## Interpreting Results

- **High count of flagged routings** may indicate a blanket policy of disabling logging. Consider enabling it at least for critical operations
- **Generated routings** (auto-created by PeopleSoft) often have logging disabled by default. Review whether these carry important traffic
- **Custom routings** without logging suggest an intentional decision that should be validated with the integration team

## Recommendations

1. **Enable logging:** In PeopleTools > Integration Broker > Integration Setup > Routings, set the "Log Detail" flag to "Header Only" (0) or "Header & Detail" (1) for each flagged routing
2. **Performance consideration:** Header-only logging has trivial overhead. Header+Detail can balloon the IB log tables on high-volume routings — turn it on for the ones you actually want to troubleshoot
3. **Review periodically:** Logging may be intentionally disabled during high-volume batch processing. Re-enable after batch windows complete
