> For the complete documentation index, see [llms.txt](https://docs.openiam.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.openiam.com/administration-guide/operations/which-log-to-read.md).

# Which log answers which question

A routing page for an administrator holding a symptom — what the audit log answers, what each service log is responsible for, which one to open for a given failure, and what no log records at all.

## What this is, and when you need it

You have a symptom and you need one place to look. This page is the map: the audit log answers *who changed what*, each service log answers *what happened inside one component*, and the two answer different questions badly if you swap them. Everything here is read-only.

You do not need shell access to use this page. Retrieving a service log is deployment-level work and the procedure lives in the [Installation Guide](/installation/installation.md) — what you need from here is the *name* of the log to ask for, the minute to ask about, and the line to ask them to search for. Handing over "something is broken with provisioning" produces a day of nothing; handing over "the `idm` service log, 14:32 to 14:36, search for `Business Rule Service is not run`" produces an answer.

## The audit log answers "who and what", not "did it work"

The audit log is the record of intent and authorship. It is an OpenSearch index rather than a database table, it is kept indefinitely on a shipped installation, and one operation is a *tree* of events linked by a parent id. Read it at `/webconsole/viewAuditLog`; open a single event at `/webconsole/auditLog?id=<AUDIT_LOG_ID>`. The model, the search parameters and the export mechanism are in [Find audit evidence](/administration-guide/operations/find-audit-evidence.md) — this section is only the boundary of what it can tell you.

| The audit log records                                                           | The audit log never records                                                                                                                                                        |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Who requested a change, when, from which address, session and node              | What the managed system actually did — the target's own protocol error reaches no OpenIAM record                                                                                   |
| `SUCCESS` or `FAILURE` per event, in a parent/child tree                        | Anything a service caught and swallowed: a Groovy script that failed to instantiate, business rules skipped for a missing consumer, a notification abandoned for a missing address |
| Before and after values, for the eleven user-changing actions that render them  | Its own failures — a failed audit write and a failed export dispatch are logged, not audited                                                                                       |
| The provisioning stream: the ordered resources an operation *intended* to touch | Anything below the OpenIAM services — the gateway, the front-end web server, the broker                                                                                            |
| The connector's reply, as a child event correlated by the parent audit log id   | Whether a value it stored was truncated, or whether the event you are missing was ever attempted                                                                                   |

{% hint style="warning" %}
**A successful save is not evidence of an outcome, and neither is a successful parent event.** A parent that reports `SUCCESS` completed *its own* work; the asynchronous child that touched the managed system can have failed underneath it. Always take the parent audit log id and look for its children before you conclude an operation worked — see [Find the evidence for one change](/administration-guide/operations/find-audit-evidence.md#find-the-evidence-for-one-change).
{% endhint %}

## The service logs, and what each one is responsible for

Each OpenIAM service keeps its own log, and what a log can explain follows exactly from what its service is responsible for. The last column is what to ask for by name when someone else fetches it.

| Log                     | The service is responsible for                                                                                                                                                                                                                          | So its log explains                                                                                                                                                                               | Ask for it as                                                                                 |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| **ESB**                 | The front door for the UI services and the gateway: authentication rule evaluation, adaptive risk, content-provider and URI-pattern resolution, password-policy resolution, mailbox rotation, OTP generation, certificate and CRL handling, geolocation | Sign-in refusals with no user-visible reason, a risk step that failed open instead of evaluating, a content provider that never matched, a custom resolver or risk script that fell back silently | `esb`                                                                                         |
| **UI services**         | Rendering the screens, holding the browser session, and writing the audit event the screen caused — Webconsole, SelfService, the IdP, and the report viewer, each on its own path                                                                       | A screen that will not load or renders empty, a session or cookie question, and whether a request arrived through the gateway at all                                                              | `webconsole`, `selfservice`, `idp`, `reportviewer` — name the one that served the URL         |
| **IDM**                 | Building and dispatching every provisioning operation, running business rules, pre- and post-processors, and the data-validation script                                                                                                                 | A provisioning operation that reported success and changed nothing, entitlements missing across many users at once, a processor that was never loaded                                             | `idm`                                                                                         |
| **Synchronization**     | Reading source records, matching them to identities, running transformation scripts                                                                                                                                                                     | Records skipped or unmatched, a source query the connector could not answer, a binding that never reached a transformation script                                                                 | `synchronization`                                                                             |
| **Reconciliation**      | Comparing OpenIAM against a managed system and applying the situation responses                                                                                                                                                                         | A run that processed zero records with no errors, a situation script that failed to compile, a pre- or post-processor whose failure left nothing on the audit entry                               | `reconciliation`                                                                              |
| **Workflow**            | Activiti: approval processes, candidate resolution and task assignment, escalation, the membership grant that follows an approval, and certification reviewer tasks                                                                                     | A request that reads Approved while the membership is absent, an approver level that silently went missing, reviewers who have no task although review items exist                                | `workflow`                                                                                    |
| **Certification**       | Campaign previews, launch, review items, and report chunking and assembly — the whole subsystem except the reviewer workflow, which is Activiti                                                                                                         | A campaign that generated nothing, a preview that never started, a custom helper script that silently did not load, a report that never assembled                                                 | `certification-manager`                                                                       |
| **Risk**                | Identity and entitlement risk scores, the nightly convergence sweep, and publishing score changes                                                                                                                                                       | Scores that never refresh, a sweep that never completes, a risk-filtered campaign whose scope came back empty                                                                                     | `risk-manager`                                                                                |
| **Mail**                | Resolving the recipient address, fetching and rendering the template, handing the message to SMTP, and sweeping the reply inbox                                                                                                                         | A notification nobody received, a disabled or renamed template, a recipient with no active address — none of which fails an audit event                                                           | `email-manager`                                                                               |
| **Audit**               | Stamping, writing and exporting audit documents                                                                                                                                                                                                         | Audit events missing for operations you know happened, and a SIEM feed that stopped without any screen saying so                                                                                  | `audit-log-manager`                                                                           |
| **Batch tasks**         | The scheduling cycle and every batch task run                                                                                                                                                                                                           | Tasks that stopped running with no failure recorded anywhere, and a cron that fired in an unexpected hour                                                                                         | `batch-task-manager`                                                                          |
| **Groovy**              | Caching and serving script bodies to every service that runs one                                                                                                                                                                                        | A script edit that appears not to have taken effect — `Failed to put groovy script in cache.` is written here and reaches no screen                                                               | `groovy-manager`                                                                              |
| **Authorization graph** | Building and holding the graph that effective access is computed from                                                                                                                                                                                   | Whether a requested rebuild finished, and how long it took. The rebuild request's own response only confirms it was accepted                                                                      | `auth-manager`                                                                                |
| **Connector runtime**   | Talking to the target. It runs outside OpenIAM, in its own container or as a Windows service                                                                                                                                                            | Every target protocol error — bind failures, schema violations, LDAP referrals, attributes the target rejected — and a connector that consumes a request and never answers it                     | The connector's own log on its host. Give the managed system name and the minute              |
| **Access Gateway**      | Matching the request to a content provider and URI pattern, enforcing the decision, and proxying to the right upstream                                                                                                                                  | Requests that never reached OpenIAM at all, upstream and proxy failures, and the module's own matching decision                                                                                   | The gateway's error log and its access log, which are separate from every OpenIAM service log |

One thing about that last row will mislead you if you meet it cold: in a container deployment an **empty gateway log is a configuration state, not evidence that no request arrived**, and the shipped starter configuration puts passwords and session tokens into whatever collects your logs. Both are explained in [Diagnose a failed operation](/administration-guide/operations/diagnose-a-failed-operation.md#the-access-gateway).

{% hint style="info" %}
**"The provisioning service log" and "the IDM log" are the same file.** Provisioning runs inside the `idm` service; both names appear in this guide and in support tickets. Synchronization and reconciliation, by contrast, really are separate services with separate logs.
{% endhint %}

## Which log to read for a given symptom

Start at the left. The middle columns are ordered — open the first, and only go to the second if the first is silent.

| Symptom                                                                               | Read this first                               | Then                                                                | What you are looking for                                                                                                                                                                                                                                                                           |
| ------------------------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A provisioning operation reported success and the managed system never changed        | The audit tree — parent, then children        | `idm`, then the connector's own log                                 | A `CONNECTOR_RESPONSE` child at all. No child means OpenIAM never asked; a failed child means the target answered and the reason is in the connector's log                                                                                                                                         |
| Provisioning succeeded, the account exists, and it carries no entitlements            | `idm`                                         | The audit event's `BUSINESS_RULE_EXPLANATION` attribute             | `Business Rule Service is not run. Skip Business Rule processing`. Rules were skipped and nothing failed. The attribute's absence on a successful operation is the same finding                                                                                                                    |
| A pre- or post-processor appears to do nothing                                        | `idm`, at debug                               | —                                                                   | `<class>.add was called, which is a NO-OP`. That line means the default processor ran and yours was never loaded                                                                                                                                                                                   |
| A synchronization skipped records, and source and OpenIAM counts do not reconcile     | `synchronization`                             | The run's audit children                                            | `Line object doesn't contain the match field. Object from source:`. A record whose match column is **blank** logs nothing at all — count those in the source yourself                                                                                                                              |
| A synchronization returned nothing from the source                                    | `synchronization`                             | The managed system's `connectorreply` documents                     | The `QUERY was:` line beside the failure — it prints the query actually sent                                                                                                                                                                                                                       |
| A field in a synchronization or reconciliation script is unexpectedly null            | The log of whichever service ran it, at debug | —                                                                   | `Ignoring field <name> in script <script>, error: …`. The binding found no field of that exact name and the run carried on                                                                                                                                                                         |
| A reconciliation run completed, processed zero records, and reported no errors        | `reconciliation`                              | The situation rows on the configuration                             | The same missing-match-field line, or a script that failed to instantiate and left nothing on the audit entry                                                                                                                                                                                      |
| An approval reads Approved and the user does not have the role                        | `workflow`                                    | The user's membership on their own screen                           | The membership step's own failure, logged under `EntityMembershipDelegate`. The audit log will show the approval as clean                                                                                                                                                                          |
| An approval or a certification review sat untouched and nobody was told               | `email-manager`                               | `workflow`                                                          | `Send notification failed. Email was null for userId=…`. There is no audit failure for this — the transport was never reached                                                                                                                                                                      |
| An approver level went missing after you changed the approver-order property          | `workflow`                                    | —                                                                   | `Cannot add association type: <value>`. An unrecognised name in the list is skipped silently                                                                                                                                                                                                       |
| A campaign generated nothing, or a preview never started                              | `certification-manager`                       | The preview and launch keys, then `ACCESS_REVIEW_ITEM` row growth   | `Cannot instantiate script: <path>. Using default helper logic` for a helper that stopped applying; a capacity error for a preview rejected outright                                                                                                                                               |
| A campaign has review items but its reviewers have no tasks                           | `workflow`                                    | The campaign's exclusion rows                                       | Reviewer tasks are Activiti, not certification — an unresolved reviewer becomes an exclusion rather than a task                                                                                                                                                                                    |
| A sign-in failed and the user saw no message                                          | `esb`                                         | The gateway's error log, if the ESB log has nothing for that minute | `Mandatory extra data don't present`; `No Content Provider of URI Pattern information provided, or could not resolve. Using default AUth Provider`; `Cannot process risk: %s, params: %s`                                                                                                          |
| A certification report was requested and never assembled                              | `certification-manager`                       | `email-manager`, for a current-state report                         | `Dispatching N chunk(s) for …` proves chunks went out; `Failed to build report row for access review item …` marks one bad item. A current-state report is email-only, so a missing address is a silent non-delivery                                                                               |
| Every batch task stopped at once and `LAST_EXEC_TIME` is frozen on all of them        | `batch-task-manager`                          | The Scheduled Tasks grid of each enabled task                       | `Exception occurred during batch tasks execution`, repeating on the cycle. No audit record exists, because no task was ever started                                                                                                                                                                |
| Audit events are missing for operations you are certain happened                      | `audit-log-manager`                           | The `auditlog` index itself                                         | `Can't save audit log` and `Could not dispatch to audit export connectors`. Both are caught rather than propagated, so the operation succeeded and the record did not                                                                                                                              |
| Risk scores never refresh, or the nightly sweep never completes                       | `risk-manager`                                | The `RISK_NIGHTLY_SWEEP` row and its audit entry                    | The skip line when there is no live consumer, and `RiskEnumerationException` when the population could not be enumerated — the run is deliberately not recorded                                                                                                                                    |
| `Response is not received from RabbitMQ during reply timeout`                         | The log of the service that made the call     | The broker's management console                                     | Time the gap between request and error: roughly two minutes is the deployment's value, roughly thirty seconds is the compiled baseline. See [the reply timeout](/administration-guide/operations/diagnose-a-failed-operation.md#the-broker-reply-timeout)                                          |
| Effective access is wrong, the membership row is right, and a rebuild appeared to run | `auth-manager`                                | `/webconsole/authorizationDebug`, before and after                  | `Creation (or fail) of authorization objects in graph database took <n> ms` marks the end of a rebuild; `Can't rebuild graph` marks a failed one. A rebuild that failed hard drops the graph indices and stops the service, which no OpenIAM screen reports                                        |
| The object is right on its own screen and search cannot find it                       | Neither — this is not a log question          | —                                                                   | A stale index. Run the [two-question test](/administration-guide/operations/rebuild-a-search-index.md#stale-index-versus-bad-data-the-two-question-test)                                                                                                                                           |
| One user's detail screen takes far longer to open than another's                      | `auth-manager`, at debug                      | The user's own record, to count their identities                    | `is Entitled. Time: <ms>. User ID: <id>. Resource ID: <id>`. Before rendering, OpenIAM asks for each identity on the record whether that user is entitled to the identity's managed system resource, so the wait grows with the number of identities and with the size of that user's entitlements |

## Raising the detail level

Several diagnoses above only exist at `debug`, and a log level is not retroactive: you raise the category, reproduce the symptom, and read the result. Each category below is a value you type into a logging configuration — **how** to set one is deployment work and belongs to the [Installation Guide](/installation/installation.md).

| Logger category                                                       | Set to  | The line it unlocks, and where                                                                                      | What that line proves                                                                                                                                                                                    |
| --------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `org.openiam.idm.provisioning.preprocessor.user`                      | `DEBUG` | `<class>.add was called, which is a NO-OP` — the `idm` log                                                          | The default no-op processor ran. Your processor was never loaded, as opposed to loaded and doing nothing                                                                                                 |
| `org.openiam.script`                                                  | `DEBUG` | `Ignoring field <name> in script <script>, error: …` — the log of whichever service ran the script                  | A binding was discarded because the script declares no field of that exact name. This is the usual cause of a null you cannot explain                                                                    |
| `org.openiam.esb.am.service.impl.AuthResourceAttributeServiceImpl`    | `DEBUG` | `try to get attribute list by provider id:<PROVIDER_ID>` — the ESB log                                              | Federation attribute resolution ran at all, and for the provider you think it did                                                                                                                        |
| `org.openiam.esb.am.service.impl.AbstractAuthResourceAttributeMapper` | `DEBUG` | `Getting attribute with name:<NAME>`, then `Attribute found` or `Attribute not found` — the ESB log                 | Whether the *source* user attribute existed. `Attribute not found` is a data answer, not a mapping answer                                                                                                |
| `org.openiam.authmanager.service.impl`                                | `DEBUG` | `is Entitled. Time: <ms>. User ID: <id>. Resource ID: <id>` — the auth-manager log                                  | How long one entitlement check took, for which user and which resource. A screen that runs one check per row is slow in proportion to these                                                              |
| `org.openiam.ui.web.filter.ContentProviderFilter`                     | `DEBUG` | `URI Pattern ID: <patternId>, Content Provider ID: <cpId>, is From Proxy: true. User ID: null` — the UI service log | Which content provider and URI pattern matched, and whether the gateway was in the path. `is From Proxy: false` on a request you expected through the gateway means the module is not in the path at all |

The broad Spring levels — `logging.level.org.openiam`, `.org.openiam.mq`, `.org.openiam.security`, `.org.springframework` and `.org.hibernate` — are properties with shipped defaults, listed with those defaults in [Diagnose a failed operation](/administration-guide/operations/diagnose-a-failed-operation.md#service-logs-and-log-levels).

{% hint style="warning" %}
**Raising a level in the Webconsole may change nothing.** A service-wide log level set by the deployment sits below the property model and wins, and the shipped starter values are deliberately verbose — trace on several backend services, debug on the gateway. If a level you set has no visible effect, that is the reason, and confirming which layer won is a deployment question. See [Where settings live](/administration-guide/start/where-settings-live.md), then the [Installation Guide](/installation/installation.md).
{% endhint %}

## What is not in any log

Some failures are recorded nowhere, and knowing which ones saves you from searching for evidence that was never written. These are the honest limits.

| What no log holds                                                              | Where you would have looked                         | What to do instead                                                                                                                          |
| ------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| The managed system's own protocol error                                        | The audit trail, or an OpenIAM service log          | Only the connector's own log on its host sees it. Ask for it with the managed system name and the minute                                    |
| An administrator-initiated password reset for a user with **no** email address | Anywhere — there is no log line and no audit entry  | The reset succeeds and the notification branch is simply not entered. Confirm the address before you rely on the mail                       |
| Certification, SoD and workflow report mails skipped for a missing address     | `email-manager`, or the audit trail                 | Nothing is written. Audit your approver and reviewer populations for **active** addresses rather than waiting for complaints                |
| A synchronization record whose match value is **blank**                        | `synchronization`                                   | Only an *absent* match column logs. Count the source rows with an empty match column yourself                                               |
| Which log level is actually in force for a service                             | The property screens                                | No screen reports it, because the deciding layer is below the property model. The deployment owner can confirm it                           |
| The effective broker reply timeout                                             | The properties file, which does not contain the key | Time the interval between the request and the timeout error; that interval is the observable value                                          |
| The seven database schemas and the version each one is at                      | Any Webconsole screen                               | There is none. That evidence comes from the database, not the product                                                                       |
| An audit attribute that was truncated at 32,766 characters                     | The audit detail screen                             | Nothing indicates the cut. Compare the stored value's length against the source when the exact bytes matter                                 |
| A batch cycle that aborted before starting any task                            | The audit trail                                     | No `BATCH_TASK_EXECUTE` record exists, because no task was started. `LAST_EXEC_TIME` frozen on every enabled task at one moment is the tell |
| Anything the gateway did, before the deployment enables its container logging  | The gateway's container log                         | An empty gateway log is a configuration state, not proof that no request arrived                                                            |
| Debug-only traces, for something that already happened                         | Any log, at the shipped `INFO`                      | They were never written. Raise the category, reproduce, then read                                                                           |

The pattern under most of these rows is the same and worth naming: OpenIAM prefers availability to assurance on several paths, so a failure is caught, logged at warn or debug, and the operation reports success. If the absence of an outcome would matter to you, do not wait for a failed audit event — alert on the log line, or verify the outcome directly on the object.

## Related

* [Diagnose a failed operation](/administration-guide/operations/diagnose-a-failed-operation.md) — the layer-by-layer evidence map, the queue layer, and a worked example that follows one failed provisioning operation through nine layers
* [Find audit evidence](/administration-guide/operations/find-audit-evidence.md) — the audit data model, the search parameters, and following a parent id
* [Where settings live](/administration-guide/start/where-settings-live.md) — which layer the value you are reading came from, including a log level
* [Error and symptom index](/administration-guide/error-and-symptom-index.md) — a verbatim error string, and the page that explains it
* [Installation Guide](/installation/installation.md) — retrieving a service log, changing a logger level, and the deployment-level settings that sit below the property model

*Applies to OpenIAM 2026.8.1. Last reviewed 7 August 2026.*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.openiam.com/administration-guide/operations/which-log-to-read.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
