Support Custom Log Subdirectories & Category Filtering in Control Panel > Server Logs

Starting with recent Liferay DXP releases (such as 2026.Q3), the Control Panel > Security > Server Logs UI provides a convenient way for administrators to view and download standard root Liferay log files (liferay.<date>.log) directly from the browser.

Control Panel:


Server Logs Home:


Server Logs:

However, in complex enterprise deployments, custom OSGi modules, REST services (e.g., ModuleA, payment gateways, external ERP integrations), and business-unit-specific features are frequently configured via Log4j2 (*-log4j-ext.xml) to write to dedicated subdirectories under ${liferay.home}/logs/ (such as /logs/moduleA/, /logs/integrations/, or /logs/common/) to keep high-volume or sensitive logs isolated from the main root log.

Currently, the OOTB Server Logs portlet only scans and renders the default root Liferay logs. It does not detect or display log files stored inside custom subdirectories. As a result, developers and L1/L2 support teams cannot view or download module-specific logs through the Control Panel UI and must request direct OS/SSH file-system access or rely on external log aggregation tools just to troubleshoot isolated module issues.

What is your project about? (e.g. Intranet, Partner Portal, Enterprise Website, etc) Enterprise DXP Platform & Custom Microservices/REST Integrations (featuring dedicated REST modules, multi-departmental services, and headless API integrations running on Liferay DXP)

What is your proposed solution? (optional)

Enhance the Control Panel > Security > Server Logs UI to dynamically discover and support log subdirectories within ${liferay.home}/logs/:

  1. Log Source / Directory Dropdown Selector: Add a dropdown filter at the top of the Server Logs view. By default, it should display Liferay (Root) alongside any detected subdirectories under ${liferay.home}/logs/ (e.g., Module/Project A, Module/Project B, Integrations, Common).

  2. Smart Directory Exclusion: Automatically exclude internal system/instance folders such as the companies directory (or make excluded folder names configurable via System Settings > Logging) so only relevant application log folders populate the dropdown.

  3. Consistent Viewing & Downloading: Once a subdirectory is selected from the dropdown, the UI should list all date-stamped log files within that folder, displaying file sizes and supporting both the inline live log viewer and direct file download—matching the exact behavior currently available for standard Liferay root logs

Working Proof of Concept (PoC) & Reference Implementation: I have already built and verified this capability locally on Liferay DXP 2026.Q3 as a standalone OSGi module extension (server-logs-web) that dynamically scans ${liferay.home}/logs subdirectories (excluding companies) and renders the dropdown switcher seamlessly in the Control Panel.

I’m running 2026.Q3.9 and don’t see “Server Logs”?

Hi Chris,

Yes! That functionality is currently gated behind a feature flag in certain DXP builds. You can enable it using either of the following methods:

Option 1: Via the UI

  1. Go to Control Panel > Configuration > Instance Settings.
  2. Navigate to the Feature Flags section and click on Developer.
  3. Locate and enable LPS-170670.

Option 2: Via Portal Properties
Alternatively, you can enable it permanently by adding the following line to your portal-ext.properties file: feature.flag.LPS-170670=true

Once enabled, the Server Logs portlet will appear under your Control Panel Security settings.

I’ve never seen a “Developer” Section in Feature Flags, how did you get that? :smiley:

I enabled LPS-170670 in portal-ext.properties and see it now though, thanks!

Another thing that should be fixed:
The container that shows the logs shouldn’t have a max-width, so we don’t have to scroll left and right the whole time if the screen width is available…

Glad LPS-170670 worked for you! :raising_hands:

1. How to get the “Developer” tab in Feature Flags:
By default, Liferay hides the Developer scope in standard bundles. You can unlock it in the UI by adding this line to your portal-ext.properties (and restarting):

feature.flag.ui.visible[dev]=true

Nice, thanks!

You should write the docs, because - like most of the time - I can’t find anything on this in the docs.