Please rate how useful you found this document: 
Average: 2.7 (3 votes)


In version 2.0.29 and later, ProcessMaker uses the configuration file env.ini for global settings which aren't available under the ADMIN menu.

Editing the env.ini file

Use a plain text editor to edit the configuration file located at:


It is generally found at:

Windows XP/Server 2003:
C:\Program Files\ProcessMaker-2_X_X\processmaker\workflow\engine\config\env.ini
Windows Vista/7/8/Server 2008:

By default, the env.ini file has the following content:

debug=0 ; To set the time zone uncomment the following line. ; For valid time zones check ;time_zone = "America/New_York" ; To set a different memory limit, uncomment the following line. ; For more info ;memory_limit = "100M" ; To turn off caching of web services calls, uncomment the following line. ;wsdl_cache = 0

Most of the settings can be enabled by setting them to 1 and disabled by setting them to 0. Settings which are strings should be enclosed in double quotation marks. Lines beginning with ";" (semicolons) are treated as comments and are ignored. Remove the semicolon to uncomment the setting.

Available Settings:

  • debug_sql = 0|1
Set to 1 to log all SQL queries to the wf_<WORKSPACE>, rb_<WORKSPACE> and rp_<WORKSPACE> databases in MySQL. Default is 1. For more information, see MySQL Logging.
  • debug_time = 0|1
Set to 1 to log the time for web requests to be processed by ProcessMaker. Default is 0. For more information, see Time Logging.
  • debug_calendar = 0|1
Set to 1 to log information about calendars. Default is 0.
  • wsdl_cache = 0|1
Set to 0 to disable the caching of WSDL (Web Services Description Language) function calls. The default is 1, so WSDL function calls are cached for up to 24 hours, which increases the reliability (especially if there are connection problems), but is a problem when needing immediate execution for debugging.
  • memory_limit = "XM"
Set the maximum amount of memory available for each login session in ProcessMaker. Use "M" for megabytes, "K" for kilobyes and "G" for gigabytes. It is not recommended to set this value to less than "100M", which is the default. If generating large Output Documents, it may be necessary to increase this value. To set the memory_limit before version 2.0.29, seeIncreasing the maximum memory per session.
  • time_zone = "zone"
Set the time zone for the ProcessMaker server. This setting determines the time zone used for all timestamps in ProcessMaker, such as the starting and ending time for cases. By default, the time zone is set to "America/New_York". A list of available timezones can be found at:
To set ProcessMaker's time zone before version 2.0.29, See Default Time Zone.

MySQL Logging

If the debug_sql option is set to 1 (or debug is set to 1), then every SQL query to the workflow (wf_<WORKSPACE>), rbac (rb_<WORKSPACE>) and report (rp_<WORKSPACE>) databases will be written in the following three log files:


Each line in the log files records SQL actions in the following format:

time(HH:MM:SS.mmm) address-of-user database workspace [type] function/SQL-query [URL-path -> code-file.php:line-number:function() -> ...]

For example, here is the shared/log/workflow.log file for the "admin" user's login from the IP address

12:18:26.179 wf workflow [info] executeQuery(): SELECT LANGUAGE.LAN_ID, LANGUAGE.LAN_NAME, LANGUAGE.LAN_NATIVE_NAME, LANGUAGE.LAN_DIRECTION, LANGUAGE.LAN_WEIGHT, LANGUAGE.LAN_ENABLED, LANGUAGE.LAN_CALENDAR FROM LANGUAGE WHERE LANGUAGE.LAN_ID='en' [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:535:getLanDirection()->class.serverConfiguration.php:355:load()->Language.php:49:retrieveByPK()->BaseLanguagePeer.php:555:doSelect()->BaseLanguagePeer.php:266:doSelectRS()->BaseLanguagePeer.php:298:doSelect()->BasePeer.php:450:executeQuery()->PreparedStatementCommon.php:334:executeQuery()-> ]

12:18:26.223 wf workflow [info] Beginning transaction. [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:30:save()->BaseLoginLog.php:504:begin()-> ]
12:18:26.223 wf workflow [info] Beginning transaction. [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:30:save()->BaseLoginLog.php:505:doSave()->BaseLoginLog.php:535:doInsert()->BaseLoginLogPeer.php:383:begin()-> ]

12:18:26.224 wf workflow [info] executeUpdate(): INSERT INTO LOGIN_LOG (LOG_UID,LOG_STATUS,LOG_IP,LOG_SID,LOG_INIT_DATE,LOG_CLIENT_HOSTNAME,USR_UID) VALUES ('5507406534e1f16d2367124077319688','ACTIVE','','15db39802fcaba5acd1ed3d53335c3d6','2011-07-14

12:18:26','','00000000000000000000000000000001') [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:30:save()->BaseLoginLog.php:505:doSave()->BaseLoginLog.php:535:doInsert()->BaseLoginLogPeer.php:384:doInsert()->BasePeer.php:304:executeUpdate()->PreparedStatementCommon.php:356:executeUpdate()-> ]

12:18:26.225 wf workflow [info] Committing transaction. [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:30:save()->BaseLoginLog.php:505:doSave()->BaseLoginLog.php:535:doInsert()->BaseLoginLogPeer.php:385:commit()-> ]

12:18:26.225 wf workflow [info] Committing transaction. [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:30:save()->BaseLoginLog.php:506:commit()-> ]

12:18:26.225 wf workflow [info] Committing transaction. [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:181:create()->LoginLog.php:38:commit()-> ]

12:18:26.254 wf workflow [info] executeQuery(): SELECT COUNT(PROCESS.PRO_UID) FROM PROCESS WHERE PROCESS.PRO_STATUS='ACTIVE' [ /sysworkflow/en/classic/login/sysLoginVerify -> sysGeneric.php:592:require_once()->sysLoginVerify.php:31:require_once()->authentication.php:185:getWorkspaceInfo()->class.serverConfiguration.php:266:doCount()->BaseProcessPeer.php:308:doSelectRS()->BaseProcessPeer.php:378:doSelect()->BasePeer.php:450:executeQuery()->PreparedStatementCommon.php:334:executeQuery()-> ]

Logging will noticeably slow down ProcessMaker's performance, so it is not suggested to use this option except for debugging. The log files are not automatically deleted, so they will continue to append new information (until the file system runs out of space). If SQL Logging is enabled for long periods of time, it is a good idea to periodically delete the log files so they don't occupy too much harddrive space.

Enabling MySQL Logging before version 2.0.29

To turn on MySQL logging before version 2.0.29, edit the file <INSTALL-DIRECTORY>/workflow/public_html/sysGeneric.php with a plain text editor. it can generally be found at:Linux/UNIX:


Windows, before ProcessMaker version 1.6-4260:

C:\Program Files\ProcessMaker\apps\processmaker\workflow\public_html\sysGeneric.php

Windows, in ProcessMaker version 1.6-4260 and later:


Change the value of the debug setting to 1 to turn on detailed SQL logging:

'debug' => 1, //change this value to 1, to have a detailed sql log in PATH_DATA . 'log' . PATH_SEP . 'workflow.log'

Time Logging

If the debug_time option is set to 1, then the time to process each web request will be logged in a file located at:


Each line in the log file records the time to process a separate web request in the following format:

time-of-request(HH:MM:SS.mmm) user-address server-address processing-time(S.mmm) URL-path

Note that the processing-time is in seconds and milliseconds, so a time of 1.309 means 1 second and 309 milliseconds. The URL-path does not include the protocol and IP/Domain address. Time Logging is a good way to discover the URLs and GET variables used in the different frames in the ProcessMaker interface.

For example, here is the shared/log/time.log file for running a case:

13:11:15.000 1.76 0.179 /sysworkflow/en/classic/cases/proxyCasesList
13:11:16.000 1.76 0.507 /sysworkflow/en/classic/cases/casesMenuLoader?action=getAllCounters&amp;r=0.7974853888047986
13:11:16.000 1.76 0.481 /sysworkflow/en/classic/cases/casesStartPage?action=startCase
13:11:16.000 1.76 0.496 /sysworkflow/en/classic/cases/casesStartPage?action=startCase
13:11:20.000 1.76 0.381 /sysworkflow/en/classic/cases/casesStartPage_Ajax.php
13:11:21.000 1.76 0.323 /sysworkflow/en/classic/cases/open?APP_UID=9361624344e1f2338d52331039957370&amp;DEL_INDEX=1&amp;action=draft
13:11:23.000 1.76 0.402 /sysworkflow/en/classic/cases/ajaxListener?action=steps
13:11:23.000 1.76 0.579 /sysworkflow/en/classic/cases/cases_Open?APP_UID=9361624344e1f2338d52331039957370&amp;DEL_INDEX=1&amp;action=draft
13:11:23.000 1.76 0.404 /sysworkflow/en/classic/cases/cases_Step?TYPE=DYNAFORM&amp;UID=8318185774e1c7ec7100be1011109529&amp;POSITION=1&amp;ACTION=EDIT
13:11:24.000 1.76 0.335 /sysworkflow/en/classic/cases/ajaxListener
13:11:24.000 1.76 0.327 /sysworkflow/en/classic/cases/ajaxListener?action=steps
13:11:26.000 1.76 0.402 /sysworkflow/en/classic/cases/cases_Step?TYPE=ASSIGN_TASK&amp;UID=-1&amp;POSITION=10000&amp;ACTION=ASSIGN
13:11:28.000 1.76 0.402 /sysworkflow/en/classic/cases/cases_Derivate

The client machine is running on and the ProcessMaker server is running on (the first two numbers of the IP address aren't displayed because of the network's netmask).