You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Christopher Dodunski <ch...@christopher.nz> on 2026/01/27 10:01:14 UTC

Configuring log filenames in a multi-tenant, identical-WAR scenario

Dear Log4J2 community,

I am currently exploring the possibility of deploying multiple (byte 
identical) WARs for servicing multiple tenants, but hosted by a single 
Tomcat installation.

The WARs, although being identical (including web.xml), are to be named 
according to each tenant.  My main goal is having these web applications 
logging to different files.

     tom.war >> /tom (Tomcat context) >> logs to tom.log

     dick.war >> /dick >> logs to dick.log

     harry.war >> /harry >> logs to harry.log

I've created separate log4j2.xml configuration files for each and placed 
these in WEB-INF, as per below:

     WEB-INF/log4j2-tom.xml

     WEB-INF/log4j2-dick.xml

     WEB-INF/log4j2-harry.xml

I'd thought that the log4j-web package would allow Log4J to 
automatically select the correct XML based on Tomcat context, but this 
seems not to be the case.

I'm eager to learn of a method that would allow log filenames to be set 
from outside the WAR, if possible.

Thanking you in advance for any suggestions.

Kind regards,

Chris.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: Configuring log filenames in a multi-tenant, identical-WAR scenario

Posted by Volkan Yazıcı <vo...@yazi.ci>.
I'm pretty much a JEE/Jakarta illiterate, but have you checked the Integrating
with Jakarta EE <https://logging.apache.org/log4j/2.x/jakarta.html> page?

On Tue, Jan 27, 2026 at 11:01 AM Christopher Dodunski <
chris.webmail@christopher.nz> wrote:

> Dear Log4J2 community,
>
> I am currently exploring the possibility of deploying multiple (byte
> identical) WARs for servicing multiple tenants, but hosted by a single
> Tomcat installation.
>
> The WARs, although being identical (including web.xml), are to be named
> according to each tenant.  My main goal is having these web applications
> logging to different files.
>
>      tom.war >> /tom (Tomcat context) >> logs to tom.log
>
>      dick.war >> /dick >> logs to dick.log
>
>      harry.war >> /harry >> logs to harry.log
>
> I've created separate log4j2.xml configuration files for each and placed
> these in WEB-INF, as per below:
>
>      WEB-INF/log4j2-tom.xml
>
>      WEB-INF/log4j2-dick.xml
>
>      WEB-INF/log4j2-harry.xml
>
> I'd thought that the log4j-web package would allow Log4J to
> automatically select the correct XML based on Tomcat context, but this
> seems not to be the case.
>
> I'm eager to learn of a method that would allow log filenames to be set
> from outside the WAR, if possible.
>
> Thanking you in advance for any suggestions.
>
> Kind regards,
>
> Chris.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>

Re: Configuring log filenames in a multi-tenant, identical-WAR scenario

Posted by Ralph Goers <ra...@dslextreme.com>.
I wish I had seen this when you posted it. What you are describing is a non-scalable way for implementing multi-tenant support. You will only be able to deploy a few of these WAR files before you run into resource problems, and if they are byte identical there is no good reason to do it.

When you have multiple WAR files you are effectively trying to have each tenant have its own place in the url path. That is a good thing, but a better way to do it is to have NGINX or the Apache HTTPD server in front of your application. When it inspects the incoming path when it finds the tenant name in the path it replaces that with the generic servlet name and then sets an HTTP header with the tenant name. Then in the application add a servlet filter that converts that header into a ThreadContextMap key/value pair.  You can then access the tenant id from anywhere in your application. You can even pass it to downstream services by converting the ThreadContextMap entry back into a header.

You can then use the ThreadContextMap value to control a) the names of the log files used if you wish or b) include it as an attribute in every JSON log event when you write to ElasticSerarch.

Again - sorry it took me so long to see this.

Ralph

> On Jan 27, 2026, at 3:01 AM, Christopher Dodunski <ch...@christopher.nz> wrote:
> 
> Dear Log4J2 community,
> 
> I am currently exploring the possibility of deploying multiple (byte identical) WARs for servicing multiple tenants, but hosted by a single Tomcat installation.
> 
> The WARs, although being identical (including web.xml), are to be named according to each tenant.  My main goal is having these web applications logging to different files.
> 
>    tom.war >> /tom (Tomcat context) >> logs to tom.log
> 
>    dick.war >> /dick >> logs to dick.log
> 
>    harry.war >> /harry >> logs to harry.log
> 
> I've created separate log4j2.xml configuration files for each and placed these in WEB-INF, as per below:
> 
>    WEB-INF/log4j2-tom.xml
> 
>    WEB-INF/log4j2-dick.xml
> 
>    WEB-INF/log4j2-harry.xml
> 
> I'd thought that the log4j-web package would allow Log4J to automatically select the correct XML based on Tomcat context, but this seems not to be the case.
> 
> I'm eager to learn of a method that would allow log filenames to be set from outside the WAR, if possible.
> 
> Thanking you in advance for any suggestions.
> 
> Kind regards,
> 
> Chris.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org