Configure action logging and anonymous analytics in ACLI

Configure action logging and anonymous analytics in ACLI

Starting with ACLI release 9.4, you can log detailed information about each action that runs and optionally share anonymized analytics with Appfire. These features help improve product planning and development while allowing you to maintain control over data sharing and visibility.

Both features are supported by the ACLI Managed Service and are independently configurable:

  • Action logging is turned off by default.

  • Anonymous analytics sharing is turned on by default.

Enable action logging

When you enable action logging, ACLI creates a daily log file named in the format action-YYYY-MM-DD.log in the directory you configure for logging. Each log entry is a single line of JSON that contains structured information about an action run.

Here’s an example of what the log looks like when running the runFromPageList action, which internally runs modifyPage:

{"serverInfo":{"baseUrl":"https:\/\/examplegear.com\/wiki","product":"Confluence","build":"b5532e6ae35f828219efdf3f57295a2415782672","buildDate":null,"version":"1000.0.0"},"exitValue":0,"actionInfo":{"server":"https:\/\/examplegear.com","common":"-a modifyPage --id @pageId@ --findReplace \"Replace this:With that\" ","action":"runFromPageList","user":"bob@appfire.com","cql":"text ~ 'Replace this'","token":"***"},"exitCode":"SUCCESS","id":"1a39045d-5215-4566-b465-31125bd457eb"} {"exitValue":0,"actionInfo":{"action":"modifyPage","findReplace":"Replace this:With that","id":"1725136908"},"exitCode":"SUCCESS","id":"47493b71-92f9-4915-8abf-b4af5f5421c5","parentId":"1a39045d-5215-4566-b465-31125bd457eb"}

Here are those same two log records, formatted for readability:

runFromPageList

{ "serverInfo": { "baseUrl": "https://examplegear.com/wiki", "product": "Confluence", "build": "b5532e6ae35f828219efdf3f57295a2415782672", "buildDate": null, "version": "1000.0.0" }, "exitValue": 0, "actionInfo": { "server": "https://examplegear.com", "common": "-a modifyPage --id @pageId@ --findReplace \"Replace this:With that\" ", "action": "runFromPageList", "user": "bob@appfire.com", "cql": "text ~ 'Replace this'", "token": "***" }, "exitCode": "SUCCESS", "id": "1a39045d-5215-4566-b465-31125bd457eb" }

modifyPage

{ "exitValue": 0, "actionInfo": { "action": "modifyPage", "findReplace": "Replace this:With that", "id": "1725136908" }, "exitCode": "SUCCESS", "id": "47493b71-92f9-4915-8abf-b4af5f5421c5", "parentId": "1a39045d-5215-4566-b465-31125bd457eb" }

Each log entry includes a unique "id". When actions run within other actions (such as runFromPageList), the child entries include a "parentId" that links them to the top-level action.

Understand anonymous analytics

Anonymous analytics use the same logging system but remove identifying information before sending any data to Appfire. This helps us understand general usage trends without knowing who performed the actions or what content was affected.

Here's how the two records above look after anonymization:

runFromPageList (anonymized)

{ "serverInfo": { "baseUrl": "", "product": "Confluence", "build": "b5532e6ae35f828219efdf3f57295a2415782672", "buildDate": null, "version": "1000.0.0" }, "exitValue": 0, "actionInfo": { "server": "", "common": "", "action": "runFromPageList", "user": "", "cql": "", "token": "" }, "exitCode": "SUCCESS", "id": "1a39045d-5215-4566-b465-31125bd457eb" }

modifyPage (anonymized)

{ "exitValue": 0, "actionInfo": { "action": "modifyPage", "findReplace": "", "id": "" }, "exitCode": "SUCCESS", "id": "47493b71-92f9-4915-8abf-b4af5f5421c5", "parentId": "1a39045d-5215-4566-b465-31125bd457eb" }

These anonymized logs help us plan features and improvements based on how ACLI is used—without collecting any personal, project, or content-specific data.

Configure logging and analytics

You can control both features through the acli-service.properties file, located in your ACLI installation directory. The ACLI Managed Service reads this configuration and runs as a background process to handle logging and analytics with minimal performance impact.

Here’s an example acli-service.properties configuration created by the installer:

# ACLI service configuration - service starts only if a feature is enabled port = 7789 # Logging directory (absolute or relative path) loggingDirectory = logs # Enable action logging actionLogging = false # Unique ID for this installation installationId = 11991b6b-f512-45c6-7fc3-6bdbb2b622d1 # Logging level: debug, info, warn, or error serviceLogLevel = info

To stop sharing anonymous analytics with Appfire, add this line:

shareAnalytics = false

If the file is missing, ACLI uses default values: analytics sharing is enabled, and action logging is disabled. If you installed ACLI using a ZIP distribution, you can create this file manually to configure logging or disable analytics.

About the ACLI Managed Service

The ACLI Managed Service is a lightweight background web server that supports logging and analytics. It runs on localhost using the configured port (default is 7789) and stores logs in the directory defined by loggingDirectory (default is logs in the installation directory).

ACLI automatically starts the service under the following conditions:

  • Anonymous analytics is enabled (by default or in the configuration)

  • Action logging is enabled

  • You access the web UI.

ACLI stops the service automatically when it's no longer needed. You can also stop it manually:

acli -a stopServer --port 0

Do this before deleting the installation directory, or use the uninstaller if you installed ACLI using an installer.