Skip to content

Monolog logging (zmsslim)

ZMS applications use a single PSR-3 logger on the global App class: App::$log. It is configured in zmsslim by BO\Slim\Bootstrap and shared by all Slim-based modules (zmsbackend, zmsadmin, zmscitizenapi, …).

The minimum log level is also centralized in zmsslim: you set DEBUGLEVEL once in the environment; zmsslim exposes it as ZMS_DEBUGLEVEL, and every module’s App::DEBUGLEVEL inherits that value for Bootstrap::configureLogger().

Quick reference

TopicDetail
Logger propertyApp::$log (Monolog\Logger, null before bootstrap)
Env variableDEBUGLEVEL (e.g. in .env, DDEV, deployment) — default INFO
zmsslim defineZMS_DEBUGLEVEL — set in Application.php from getenv('DEBUGLEVEL')
App constantApp::DEBUGLEVEL — each module inherits ZMS_DEBUGLEVEL from \BO\Slim\Application
Effective minimum levelWhichever of the above applies after bootstrap (App::DEBUGLEVEL at runtime)
Web bootstrap\BO\Slim\Bootstrap::init()
CLI / cron\BO\Slim\Bootstrap::ensureLogger() or initForCli() via script_bootstrap.php
OutputJSON lines to stderr (web) or stdout (CLI/cron)
Do not usePHP error_log(), print_r(), echo for application logging

Central debug level (ZMS_DEBUGLEVEL)

zmsslim owns the debug-level wiring for all Slim modules. You do not configure a separate log level per module in production; one environment variable applies everywhere that bootstraps through \BO\Slim\Bootstrap.

flowchart LR
  env["DEBUGLEVEL env"]
  zms["ZMS_DEBUGLEVEL\n(zmsslim Application.php)"]
  app["App::DEBUGLEVEL\n(each module App)"]
  boot["Bootstrap::configureLogger()"]
  mono["Monolog minimum level\n(App::$log)"]

  env --> zms --> app --> boot --> mono
  1. Operations set DEBUGLEVEL (for example INFO or WARNING) in .env, DDEV, or deployment config.
  2. When zmsslim/src/Slim/Application.php is loaded, it defines ZMS_DEBUGLEVEL from that env var (default INFO if unset).
  3. \BO\Slim\Application declares const DEBUGLEVEL = ZMS_DEBUGLEVEL. Each module’s class App extends \BO\Zmsbackend\Application (etc.) inherits the same constant unless you override it locally.
  4. On bootstrap, Bootstrap::init() / ensureLogger() / initForCli() call configureLogger(App::DEBUGLEVEL, App::IDENTIFIER). The level is shared; only App::IDENTIFIER and App::MODULE_NAME differ per module in the JSON output.

So ZMS_DEBUGLEVEL is the single zmsslim source of truth for how verbose logging is across zmsbackend, zmsadmin, zmscitizenapi, zmsmessaging, cron scripts, and the other Slim apps.

What you configure: DEBUGLEVEL in the environment (not a separate ZMS_DEBUGLEVEL env name).

What code reads at runtime: App::DEBUGLEVEL (backed by ZMS_DEBUGLEVEL).

Rare override: a module config.php may redefine const DEBUGLEVEL = 'WARNING'; for local experiments only — avoid this in shared deployment config.

CLI fallback: if App::DEBUGLEVEL is not defined yet, Bootstrap::initForCli() reads getenv('DEBUGLEVEL') directly.

Log levels

App::DEBUGLEVEL (from ZMS_DEBUGLEVEL) sets the minimum level written by Monolog. Messages below that level are dropped.

DEBUGLEVEL env / constantMonolog constantTypical use in ZMS
DEBUGLogger::DEBUGVerbose diagnostics (mail payloads, cache details)
INFOLogger::INFONormal operations (login, cron progress, cache hits)
NOTICELogger::NOTICENotable but expected events
WARNINGLogger::WARNINGRecoverable problems (rate limits, skipped entities)
ERRORLogger::ERRORFailures that need attention
CRITICALLogger::CRITICALSevere errors (unhandled exceptions in Twig handler)
ALERTLogger::ALERTRare; same scale as Monolog
EMERGENCYLogger::EMERGENCYRare; same scale as Monolog

Implementation mapping lives in zmsslim/src/Slim/Bootstrap.php ($debuglevels and parseDebugLevel()).

Example configuration

bash
# .env / deployment / DDEV — applies to all Slim modules via zmsslim
DEBUGLEVEL=INFO

Definition in zmsslim/src/Slim/Application.php:

php
define('ZMS_DEBUGLEVEL', getenv('DEBUGLEVEL') ? getenv('DEBUGLEVEL') : 'INFO');
const DEBUGLEVEL = ZMS_DEBUGLEVEL;

Invalid values fall back to DEBUG (permissive) in Bootstrap::parseDebugLevel().

Per-module HTTP request logging

Unlike DEBUGLEVEL (one value for all Slim modules), HTTP request/response logging is configured per module via ZMS_<MODULE>_LOGGER_* environment variables — the same naming pattern as ZMS_ADMIN_TWIG_CACHE, ZMS_API_TWIG_CACHE, and so on.

Modules that register RequestLoggingMiddleware (via BO\Slim\Helper\ModuleLoggerInitializer or their own bootstrap) emit one structured HTTP Request line per handled request through BO\Slim\LoggerService::logRequest()App::$log.

Request log throttling only

…_LOGGER_MAX_REQUESTS and …_LOGGER_MAX_ERROR_REQUESTS are access-log throttles. They cap how many HTTP Request lines LoggerService::logRequest() writes per time window. They do not limit general application logging.

Logging pathThrottled by LOGGER_MAX_*?Controlled by
HTTP Request (status < 400)Yes — …_LOGGER_MAX_REQUESTSPer-module env + …_LOGGER_CACHE_TTL
HTTP Request (status ≥ 400)Only if …_LOGGER_MAX_ERROR_REQUESTS > 0Per-module env (default 0 = unlimited)
LoggerService::logError() (exceptions)No
LoggerService::logWarning() / logInfo()No
Direct App::$log->info() / warning() / error() in app codeNoDEBUGLEVEL

So: DEBUGLEVEL sets how verbose application logs are globally; LOGGER_MAX_* only prevents high-frequency modules (especially calldisplay and ticket printers) from flooding logs with routine successful requests.

Successful and failed request logs use separate counters and the same window length (…_LOGGER_CACHE_TTL, default 60 seconds). Throttling a successful poll does not block logging a later 500 on the same module.

ModuleEnv prefixTypical traffic
zmscitizenapiZMS_CITIZENAPI_LOGGER_*Public booking API
zmsbackendZMS_BACKEND_LOGGER_*Internal REST API
zmsadminZMS_ADMIN_LOGGER_*Staff UI
zmscalldisplayZMS_CALLDISPLAY_LOGGER_*Display monitors (frequent polling)
zmsstatisticZMS_STATISTIC_LOGGER_*Statistics UI
zmsticketprinterZMS_TICKETPRINTER_LOGGER_*Ticket printers (frequent polling)

LoggerService variables

VariableDefaultRole
…_LOGGER_MAX_REQUESTS1000Max successful HTTP Request lines (status < 400) per rate-limit window (CACHE_TTL)
…_LOGGER_MAX_ERROR_REQUESTS0Max failed HTTP Request lines (status ≥ 400) per window; 0 = unlimited
…_LOGGER_RESPONSE_LENGTH1048576Max response body bytes considered when logging errors
…_LOGGER_STACK_LINES20Stack trace lines on logged exceptions
…_LOGGER_MESSAGE_SIZE8192Max size of a single log message
…_LOGGER_CACHE_TTL60Rate-limit window in seconds (uses CACHE_DIR)
…_LOGGER_MAX_RETRIES3Cache lock retries for rate limiting
…_LOGGER_BACKOFF_MIN / …_LOGGER_BACKOFF_MAX100 / 1000Backoff between retries (ms)
…_LOGGER_LOCK_TIMEOUT5Cache lock timeout (seconds)

See .ddev/.env.template / .devcontainer/.env.template for full examples per module.

Tuning high-frequency modules

zmscalldisplay and zmsticketprinter are special: every monitor or ticket printer typically polls the server every few seconds. With default LOGGER_MAX_REQUESTS=1000, a handful of devices can produce large, repetitive log volume even at DEBUGLEVEL=INFO.

For those modules, consider lowering ZMS_CALLDISPLAY_LOGGER_MAX_REQUESTS and/or ZMS_TICKETPRINTER_LOGGER_MAX_REQUESTS so routine poll traffic does not dominate your log stream. Admin, API, and citizen modules usually keep the defaults.

bash
# Example: cap display/printer poll logging without affecting other modules
ZMS_CALLDISPLAY_LOGGER_MAX_REQUESTS=120
ZMS_TICKETPRINTER_LOGGER_MAX_REQUESTS=120

# Other modules can stay at the template default (1000)
ZMS_ADMIN_LOGGER_MAX_REQUESTS=1000
ZMS_BACKEND_LOGGER_MAX_REQUESTS=1000

Lowering …_LOGGER_MAX_REQUESTS throttles only successful HTTP Request lines (Monolog info, status < 400). Failed requests (status ≥ 400, Monolog error) use …_LOGGER_MAX_ERROR_REQUESTS instead; the default 0 means no cap.

These variables do not affect exceptions, warnings, info messages from other LoggerService methods, or direct App::$log->… calls elsewhere in the codebase.

How to log

After bootstrap.php or script_bootstrap.php:

php
\App::$log->info('Login successful', [
    'account' => $accountName,
]);

\App::$log->warning('Could not remove availability', [
    'availabilityId' => $availabilityId,
]);

\App::$log->error('SQL import failed', [
    'file' => basename($file),
    'exception' => $e->getMessage(),
]);

Use lowercase PSR-3 method names: debug, info, notice, warning, error, critical, alert, emergency.

Context arrays

Prefer structured context (second argument) over string concatenation. The JSON processor adds standard fields:

  • time_local, client_ip, remote_addr
  • application (App::IDENTIFIER)
  • module (App::MODULE_NAME)
  • cron, cron_name when ZMS_CRON_LOG / ZMS_CRON_NAME are set in cron shell scripts

Cron logging

Cron entrypoints export ZMS_CRON_LOG=1 and ZMS_CRON_NAME=zmsbackend_hourly (example). Bootstrap::isCronLogging() adds searchable cron / cron_name fields to each JSON line.

Helpers such as zmsbackend’s VerboseCronLogTrait use Bootstrap::normalizeLogLevelName() for configurable cron verbosity.

Libraries without full bootstrap

Shared packages (zmsdldb, zmsclient) may run without App. Use optional logging only when the class exists:

php
if (class_exists('\App', false) && isset(\App::$log)) {
    \App::$log->error('…', ['context' => $value]);
}

Do not use isset(\App::$log) alone — PHP will fatal if App is not loaded.

JSON log shape (example)

json
{
  "time_local": "2026-05-26T12:00:00+02:00",
  "client_ip": "127.0.0.1",
  "application": "zmsbackend",
  "module": "zmsbackend",
  "cron": true,
  "cron_name": "zmsbackend_hourly",
  "message": "Migration check finished",
  "level": "INFO",
  "context": { "pending": 0 },
  "extra": []
}

Repository log inventory

The table below is generated automatically from App::$log->… calls in module PHP sources (excluding vendor/ and tests/). Regenerate locally:

bash
cd docs && npm run docs:log-inventory

It updates when you run npm run docs:dev or docs:build (VitePress config runs the generator first). Use the dropdown filters, search box, or click a column header to sort (toggle ascending/descending).

Generated: · 186 call(s) · Production PHP only (module src/cron/bin). Excludes vendor, tests, and test_mysql-style dev scripts under Importer/.

Showing 186 of 186 entries · sorted by module (asc)

zmsadmininfoLogin successfulzmsadmin/src/Zmsadmin/Index.php:100
zmsadmininfoLogin failed - invalid credentialszmsadmin/src/Zmsadmin/Index.php:118
zmsadmininfoUser already logged in - reusing existing sessionzmsadmin/src/Zmsadmin/Index.php:127
zmsadmininfoLogin failed - other errorzmsadmin/src/Zmsadmin/Index.php:143
zmsadmininfoUser logged outzmsadmin/src/Zmsadmin/Logout.php:34
zmsadminerrorOIDC Login errorzmsadmin/src/Zmsadmin/Oidc.php:57
zmsbackendinfoDeleted availabilityzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityDelete.php:36
zmsbackendinfoUpdated availabilityzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:112
zmsbackendinfoCreated new availabilityzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:126
zmsbackendwarningAvailabilityListUpdateFailed: Validation failedzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:57
zmsbackendwarningNo input data providedzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:231
zmsbackendwarningInvalid availabilityListzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:236
zmsbackendwarningMissing scope id in availabilityzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:255
zmsbackendwarningInconsistent scopes in availability listzmsbackend/src/Zmsbackend/Availability/Api/AvailabilityListUpdate.php:261
zmsbackenderrorSQL import failedzmsbackend/src/Zmsbackend/Cli/Db.php:248
zmsbackendinfoImporting SQL filezmsbackend/src/Zmsbackend/Cli/Db.php:20
zmsbackendinfoSQL import finishedzmsbackend/src/Zmsbackend/Cli/Db.php:51
zmsbackendinfoUsing database connectionzmsbackend/src/Zmsbackend/Cli/Db.php:74
zmsbackendinfoPending migrationzmsbackend/src/Zmsbackend/Cli/Db.php:117
zmsbackendinfoMigration check finishedzmsbackend/src/Zmsbackend/Cli/Db.php:129
zmsbackendinfoCluster cache setzmsbackend/src/Zmsbackend/Cluster/Service/Cluster.php:40
zmsbackendinfoCluster cache invalidatedzmsbackend/src/Zmsbackend/Cluster/Service/Cluster.php:352
zmsbackendinfoDepartment cache setzmsbackend/src/Zmsbackend/Department/Service/Department.php:35
zmsbackendinfoDepartment cache invalidatedzmsbackend/src/Zmsbackend/Department/Service/Department.php:335
zmsbackenderrorAnonymization process failedzmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:53
zmsbackendinfoUsing retention period from admin system configzmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:25
zmsbackendinfoUsing default retention periodzmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:30
zmsbackendinfoBeginning anonymizationzmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:40
zmsbackendinfoAnonymization process completed successfullyzmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:49
zmsbackendnoticeAnonymization dry run — no database changeszmsbackend/src/Zmsbackend/Helper/AnonymizeStatisticDataByCron.php:58
zmsbackendinfoDeleting quota older than given periodzmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:17
zmsbackendinfoProcessing quotazmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:29
zmsbackendinfoNo expired quota was foundzmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:36
zmsbackendinfoQuota successfully removedzmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:47
zmsbackendinfoKeep quotazmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:53
zmsbackendwarningCould not remove quotazmsbackend/src/Zmsbackend/Helper/ApiQuotaDeleteByCron.php:50
zmsbackendinfoReading availability listzmsbackend/src/Zmsbackend/Helper/AvailabilityDeleteByCron.php:25
zmsbackendinfoWould remove availabilityzmsbackend/src/Zmsbackend/Helper/AvailabilityDeleteByCron.php:31
zmsbackendinfoAvailability successfully removedzmsbackend/src/Zmsbackend/Helper/AvailabilityDeleteByCron.php:40
zmsbackendwarningCould not remove availabilityzmsbackend/src/Zmsbackend/Helper/AvailabilityDeleteByCron.php:43
zmsbackendinfoCalculateDailyWaitingStatisticByCron startedzmsbackend/src/Zmsbackend/Helper/CalculateDailyWaitingStatisticByCron.php:19
zmsbackendinfoCalculateDailyWaitingStatisticByCron finishedzmsbackend/src/Zmsbackend/Helper/CalculateDailyWaitingStatisticByCron.php:25
zmsbackendinfo[DRY RUN] update scope statisticszmsbackend/src/Zmsbackend/Helper/CalculateDailyWaitingStatisticByCron.php:195
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/CalculateSlots.php:29
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/CalculateSlots.php:42
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/CleanProcessArchivedToday.php:24
zmsbackendinfoExecuting archived process cleanup with commitzmsbackend/src/Zmsbackend/Helper/CleanProcessArchivedToday.php:32
zmsbackendinfoArchived process cleanup completedzmsbackend/src/Zmsbackend/Helper/CleanProcessArchivedToday.php:34
zmsbackendcritical(dynamic)zmsbackend/src/Zmsbackend/Helper/ErrorHandler.php:69
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/EventLogCleanUpByCron.php:28
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/LogCleanUp.php:29
zmsbackendinfoStarting log cleanup processzmsbackend/src/Zmsbackend/Helper/LogCleanUp.php:35
zmsbackendinfoLog cleanup config loadedzmsbackend/src/Zmsbackend/Helper/LogCleanUp.php:40
zmsbackendinfoExecuting log cleanup with commitzmsbackend/src/Zmsbackend/Helper/LogCleanUp.php:47
zmsbackendinfoLog cleanup completedzmsbackend/src/Zmsbackend/Helper/LogCleanUp.php:49
zmsbackendinfoWorkstation logoutzmsbackend/src/Zmsbackend/Helper/LogoutWorkstations.php:32
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/ReservedDataDeleteByCron.php:81
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Helper/SendMailReminder.php:53
zmsbackendinfoSend process list of current day to scope adminzmsbackend/src/Zmsbackend/Helper/SendProcessListToScopeAdmin.php:20
zmsbackendinfoProcessing scopezmsbackend/src/Zmsbackend/Helper/SendProcessListToScopeAdmin.php:35
zmsbackendinfoSend processList to scope adminzmsbackend/src/Zmsbackend/Helper/SendProcessListToScopeAdmin.php:47
zmsbackendwarningProcesslist empty for scopezmsbackend/src/Zmsbackend/Helper/SendProcessListToScopeAdmin.php:52
zmsbackendwarningMail writing in queue not successfulzmsbackend/src/Zmsbackend/Helper/SendProcessListToScopeAdmin.php:62
zmsbackendinfoDeleting expired ticketprinter older than 30 dayszmsbackend/src/Zmsbackend/Helper/TicketprinterDeleteByCron.php:20
zmsbackendinfoProcessing ticketprinterzmsbackend/src/Zmsbackend/Helper/TicketprinterDeleteByCron.php:31
zmsbackendinfoTicketprinter successfully removedzmsbackend/src/Zmsbackend/Helper/TicketprinterDeleteByCron.php:43
zmsbackendwarningCould not remove ticketprinterzmsbackend/src/Zmsbackend/Helper/TicketprinterDeleteByCron.php:45
zmsbackenderrorError during log cleanupzmsbackend/src/Zmsbackend/Log/Service/Log.php:579
zmsbackenddebugSend mailzmsbackend/src/Zmsbackend/Process/Api/ProcessConfirmationMail.php:64
zmsbackenddebugSend mailzmsbackend/src/Zmsbackend/Process/Api/ProcessDeleteMail.php:65
zmsbackenderrorExpected ProcessListCollection, received different typezmsbackend/src/Zmsbackend/Process/Api/ProcessListByClusterAndDate.php:87
zmsbackenddebugSend mailzmsbackend/src/Zmsbackend/Process/Api/ProcessPreconfirmationMail.php:62
zmsbackendinfoProcess redirectedzmsbackend/src/Zmsbackend/Process/Api/ProcessRedirect.php:45
zmsbackendinfoScope cache setzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:41
zmsbackendinfoScope cache setzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:136
zmsbackendinfoScope cache setzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:187
zmsbackendinfoScope cache setzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:254
zmsbackendinfoScope cache setzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:334
zmsbackendinfoScope cache invalidatedzmsbackend/src/Zmsbackend/Scope/Service/Scope.php:729
zmsbackenderrorFreeProcesszmsbackend/src/Zmsbackend/Slot/Repository/SlotList.php:220
zmsbackenderrorFailed to optimize table with query: $query. Error: zmsbackend/src/Zmsbackend/Slot/Service/Slot.php:501
zmsbackendinfoavailability: zmsbackend/src/Zmsbackend/Slot/Service/Slot.php:223
zmsbackendinfoUseraccount cache hitzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:265
zmsbackendinfoUseraccount cache setzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:288
zmsbackendinfoUseraccount list cache hitzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:326
zmsbackendinfoUseraccount list cache setzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:367
zmsbackendinfoUseraccount department list cache hitzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:589
zmsbackendinfoUseraccount department list cache setzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:631
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:829
zmsbackendinfo(expression)zmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:843
zmsbackendinfoUseraccount role list cache hitzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:995
zmsbackendinfoUseraccount role list cache setzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:1025
zmsbackendinfoUseraccount role and department list cache hitzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:1058
zmsbackendinfoUseraccount role and department list cache setzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:1092
zmsbackendinfoUseraccount caches invalidated after mutationzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:1143
zmsbackendwarninguser_role update on useraccount save failedzmsbackend/src/Zmsbackend/Useraccount/Service/Useraccount.php:746
zmsbackendinfoProcess parkedzmsbackend/src/Zmsbackend/Workstation/Api/WorkstationProcessParked.php:46
zmscitizenapiinfoMethod not allowedzmscitizenapi/bootstrap.php:96
zmscitizenapiwarningInvalid Office skippedzmscitizenapi/src/Zmscitizenapi/Models/Collections/OfficeList.php:25
zmscitizenapiwarningInvalid OfficeServiceRelation skippedzmscitizenapi/src/Zmscitizenapi/Models/Collections/OfficeServiceRelationList.php:26
zmscitizenapiwarningInvalid Service skippedzmscitizenapi/src/Zmscitizenapi/Models/Collections/ServiceList.php:25
zmscitizenapiwarningInvalid ThinnedScope skippedzmscitizenapi/src/Zmscitizenapi/Models/Collections/ThinnedScopeList.php:25
zmsclientinfoAuth session setzmsclient/src/Zmsclient/Auth.php:25
zmsclientinfoAuth session removedzmsclient/src/Zmsclient/Auth.php:61
zmsclienterrorOIDC Login invalid statezmsclient/src/Zmsclient/OidcHandler.php:61
zmsclienterrorOIDC Login workstation errorzmsclient/src/Zmsclient/OidcHandler.php:120
zmsclientinfoOIDC Login state validationzmsclient/src/Zmsclient/OidcHandler.php:51
zmsclientinfoOIDC Login workstation accesszmsclient/src/Zmsclient/OidcHandler.php:91
zmsclientinfoOIDC Login department checkzmsclient/src/Zmsclient/OidcHandler.php:103
zmsdldberrorSpecified rollback day does not exist in backupszmsdldb/bin/dldb-helpers.php:94
zmsdldberrorFailed to rollback filezmsdldb/bin/dldb-helpers.php:105
zmsdldberrorFailed to backup filezmsdldb/bin/dldb-helpers.php:152
zmsdldberrorFailed to write file to destinationzmsdldb/bin/dldb-helpers.php:164
zmsdldbinfoRetention period set in admin system configzmsdldb/bin/dldb-helpers.php:48
zmsdldbinfoUsing default retention periodzmsdldb/bin/dldb-helpers.php:55
zmsdldbinfoRollback day set in admin system configzmsdldb/bin/dldb-helpers.php:65
zmsdldbinfoUsing default no rollbackzmsdldb/bin/dldb-helpers.php:69
zmsdldbinfoRollback requestedzmsdldb/bin/dldb-helpers.php:79
zmsdldbinfoRolling back using backupzmsdldb/bin/dldb-helpers.php:99
zmsdldbinfoRolled back filezmsdldb/bin/dldb-helpers.php:108
zmsdldbinfoChecking if backup is requiredzmsdldb/bin/dldb-helpers.php:117
zmsdldbinfoBackup is requiredzmsdldb/bin/dldb-helpers.php:141
zmsdldbinfoBackup createdzmsdldb/bin/dldb-helpers.php:155
zmsdldbinfoFetching the backup retention periodzmsdldb/bin/dldb-helpers.php:173
zmsdldbinfoDeleted old backupzmsdldb/bin/dldb-helpers.php:187
zmsdldbwarningInvalid retention value, falling back to 7 dayszmsdldb/bin/dldb-helpers.php:51
zmsdldbwarningNo backups directoryzmsdldb/bin/dldb-helpers.php:84
zmsdldberrorDLDB access locale missingzmsdldb/src/Zmsdldb/AbstractAccess.php:146
zmsdldbwarningUnexpected array in service meta hash during importzmsdldb/src/Zmsdldb/Importer/MySQL/Entity/Service.php:276
zmsmessagingdebugMail send detailszmsmessaging/bin/mail_queue.php:34
zmsmessagingerrorMail queue transmission errorzmsmessaging/bin/mail_queue.php:22
zmsmessaginginfoMail sent from queuezmsmessaging/bin/mail_queue.php:28
zmsmessagingnoticeUse with --send to send emails.zmsmessaging/bin/mail_queue.php:14
zmsmessagingnoticeMail queue emptyzmsmessaging/bin/mail_queue.php:20
zmsmessagingdebug(expression)zmsmessaging/src/Zmsmessaging/BaseController.php:174
zmsmessaginginfo(expression)zmsmessaging/src/Zmsmessaging/BaseController.php:176
zmsmessagingwarning(expression)zmsmessaging/src/Zmsmessaging/BaseController.php:69
zmsmessaginginfoMail processed from queuezmsmessaging/src/Zmsmessaging/Mail.php:167
zmsmessaginginfoMail queue batch finishedzmsmessaging/src/Zmsmessaging/Mail.php:201
zmsmessagingwarning(expression)zmsmessaging/src/Zmsmessaging/Mail.php:227
zmsmessagingwarning(expression)zmsmessaging/src/Zmsmessaging/Mail.php:231
zmsslimwarningCould not write router cache filezmsslim/src/Slim/Bootstrap.php:313
zmsslimerrorFailed to fetch changelog: zmsslim/src/Slim/Helper/BaseChangelogHelper.php:31
zmsslimdynamic(via $level)zmsslim/src/Slim/LoggerService.php:245
zmsslimerror(expression)zmsslim/src/Slim/LoggerService.php:187
zmssliminfo(expression)zmsslim/src/Slim/LoggerService.php:197
zmsslimnoticeCache not available for rate limitingzmsslim/src/Slim/LoggerService.php:107
zmsslimwarningRate limiting errorzmsslim/src/Slim/LoggerService.php:147
zmsslimwarning(expression)zmsslim/src/Slim/LoggerService.php:192
zmsslimerrorOIDC login failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:57
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:106
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:114
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:122
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:140
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:150
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:161
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:175
zmsslimerrorToken validation failedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:190
zmsslimerrorFailed to get access tokenzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:229
zmssliminfoOIDC login attemptzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:30
zmssliminfoClearing existing sessionzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:42
zmssliminfoOIDC login successfulzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:52
zmssliminfoValidating OIDC tokenzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:98
zmssliminfoToken validation successfulzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:200
zmssliminfoGetting access tokenzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:216
zmssliminfoAccess token obtainedzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:223
zmssliminfoWriting token to sessionzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:244
zmssliminfoDeleting sessionzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:258
zmssliminfoReading token from sessionzmsslim/src/Slim/Middleware/OAuth/KeycloakInstance.php:271
zmsslimerrorUnknown OIDC provider requestedzmsslim/src/Slim/Middleware/OAuthMiddleware.php:71
zmsslimerror[Human zmsslim/src/Slim/Middleware/Session/SessionHuman.php:60
zmsslimerror(dynamic)zmsslim/src/Slim/Middleware/Session/SessionHuman.php:66
zmsslimnotice(dynamic)zmsslim/src/Slim/Middleware/Session/SessionHuman.php:44
zmsslimnotice(dynamic)zmsslim/src/Slim/Middleware/Session/SessionHuman.php:51
zmsslimcriticalPHP-Exception #{$extendedInfo[zmsslim/src/Slim/TwigExceptionHandler.php:76
zmsslimcritical(dynamic)zmsslim/src/Slim/TwigExceptionHandler.php:78
zmsslimcriticalNot catchable exception while rendering error pagezmsslim/src/Slim/TwigExceptionHandler.php:97
zmsstatisticwarningFailed to fetch /workstation/ for extendedInfozmsstatistic/src/Zmsstatistic/Helper/TwigExceptionHandler.php:26
zmsstatisticinfoLogin successfulzmsstatistic/src/Zmsstatistic/Index.php:94
zmsstatisticinfoLogin failed - invalid credentialszmsstatistic/src/Zmsstatistic/Index.php:112
zmsstatisticinfoUser already logged in - reusing existing sessionzmsstatistic/src/Zmsstatistic/Index.php:121
zmsstatisticinfoLogin failed - other errorzmsstatistic/src/Zmsstatistic/Index.php:137
zmsstatisticinfoUser logged outzmsstatistic/src/Zmsstatistic/Logout.php:41
zmsstatisticerrorOIDC Login errorzmsstatistic/src/Zmsstatistic/Oidc.php:52
zmsticketprinterdebugHOMEURLzmsticketprinter/src/Zmsticketprinter/Helper/HomeUrl.php:34
zmsticketprinterwarningError in getByHash, creating new organisation hashzmsticketprinter/src/Zmsticketprinter/Helper/Ticketprinter.php:41
  • zmsslim/src/Slim/Application.phpZMS_DEBUGLEVEL, DEBUGLEVEL, public static $log
  • zmsslim/src/Slim/Bootstrap.phpconfigureLogger(), ensureLogger(), normalizeLogLevelName()
  • zmsslim/src/Slim/LoggerService.php — HTTP request logging, rate limiting
  • zmsslim/src/Slim/Helper/ModuleLoggerInitializer.php — per-module logger env wiring and middleware registration
  • zmsslim/README.md — Slim bootstrap overview